やっぱ、疎結合のほうがいいなぁ。中身が見えない、中身を知らない。インターフェイスだけ。必要なものは API に。API にしてないところは触れて欲しくないところ。

開発初期の段階で、本当に必要だと思われた部分だけが、強く結合していて、あとは疎結合だ。時期が過ぎたら、終わり。

  1. トップ
  2. life
  3. 疎結合
  1. トップ
  2. thinking
  3. 疎結合

proxy.rb, proxy-config.yaml

とかいろいろあるやつを作ってみた。なんでそのまま使わないかっていうと、いちいち設定書くのが面倒くさかった気分。

設定は殆ど読まず、スクリプト単体で殆ど動くように。デフォルトでは files ディレクトリ以下に書き換え用のファイルを置く。

リクエストが example.com/css/base.css であれば、以下のようなファイルを探して置き換える。

  1. files/example.com/css/base.css
  2. files/example.com/base.css
  3. files/base.css

ma.la さんのソースでなんで :ProxyContentHandler を使わないんだろうって少し思ったけど、たぶん向こうの鯖へのアクセス数を減らしてレスポンスをよくするためっぽい? 全部置き換えちゃうわけだし、こっちのほうがいいので、このスクリプトもそうしてる。その辺はまるパクり!

あと流行りの Pathname を使ってみた。らくちん。


さらに規約を設定にしたら、設定より規約ってハードコーディングじゃね?みたい感じをなくせそう。

実装を見直し、規約を設定にした。好きな規約を設定して設定より規約なことができます (意味不明)

実装の見直しでは、完全にサブクラスかみたいな感じにして説明するのめんどい。

  1. トップ
  2. ruby
  3. 開発用プロキシ鯖を設定より規約に
  1. トップ
  2. web
  3. 開発用プロキシ鯖を設定より規約に

学校の何かで何時か思ったこと (何が多い)

なんかこう、やる気があったらなんでもできるとか、そんなのありえないし、「やる気」さえあれば評価されるとか、そんなのありえないんだから、そういう本当にくだらないこと、を信じるのをやめたらいいのに、気持ち悪い。と思った。けど、ただの僻みです。本当に(ry

でも実際、やる気があってもひたすらクオリティが出てこない・成果が出てこないっていうのはあって、ぶっちゃけそんなのどうしようもない。でもそこで「やる気はあるんですよ」とか言うのはどうかと思うっていうか、やる気やるくせにそのクオリティかよ的な何かにハマっていくのでこのまま人間やめたい。

  1. トップ
  2. life
  3. やる気満々ですか
  1. トップ
  2. thinking
  3. やる気満々ですか

バックアップを手動でとってたけど、やっと rsync でやるようにした。

今までなぜ rsync してなかったかというと単純に

  1. 最初の転送に時間がかかる。
  2. rsync の挙動が怖い (/ 一つでディレクトリ一個違うところとか)
  3. Windows - Linux 間なので、日本語ファイルがこわい

問題なのは最後だけで、実際やってみると問題がホントに出る。文字化けしたディレクトリだらけになる。

smbfs でマウントして remote しない rsync で転送してみる。Windows (Nina) のほうの music ディレクトリを music として共有している。

sudo mount -t smbfs -o codepage=cp932,iocharset=utf8 //nina/music /mnt/music
rsync -vrt --delete /mnt/music/ /home/cho45/music

verbose, recursive, times; マウントしたファイルは root 所有になってしまうので所有者変更は行わないようにした。

これで、うまくいってるっぽい。が、Sigur Ros の曲名でアレなやつはエンコーディングの変更で正常に転送されない。めんどいのでファイル名のアレな文字は似た字に置き換えた。

  1. トップ
  2. music
  3. 音楽ファイルのバックアップ

引越し屋さんは手際がよかった。

速度がでない感じのフレッツ光だけど、前言った実運用構成にしたら、最大 70M ぐらいまで出るようになった (Radish 東京)。そしてなぜかこの状態でフレッツスクエアの速度測定をすると 3M ぐらいしかでない。別にいいけど謎い。

でも実際、早くなってもそんなに実感はない感じ。セットアップファイル落とすときぐらいだ。

  1. トップ
  2. life
  3. 引越し
  1. トップ
  2. net
  3. 引越し

svn の HEAD を自動で公開したい。Apache さんが HEAD を普通のファイルとして認識して、普通にアクセスできる感じ。既存のものをそのままバージョン管理するような。

想定:リポジトリと Apache は同じマシンにある。

とりあえず、svn の fsfs がどっかにまとめて HEAD をもっているなら、それに symlink すれば解決だなぁと思ったのだけれど、fsfs は最初からの差分しかもっていないらしい (db/revs/{?d+})。さてどうしよう。

  • コミットをフックして (hooks/post-commit?) 公開ディレクトリを自動で svn up
  • libsvn とかでリポジトリの HEAD をどっかにマウントできる fs を作る (fsfs の場合重すぎてやばそう)

CLON - 2006/07/24

おお、なるほど。dav 化して davfs するんだ。

  1. トップ
  2. svn
  3. svn fsfs, svnfs

やっぱ、PPPoE で繋ぐ先ってどうやって決定されるんだろう、と疑問だったので調べた。

PPPoE は PPP フレームをイーサーネットフレームでカプセル化することにより動作する。このプロトコルには、発見とセッションという 2 つの異なるステージがある。

発見ステージでは、ホストはアクセス集信装置を発見するために特別な PADI (PPPoE Active Discovery Initiation) フレームをブロードキャストする。 (一般的には、ただ 1 つの) アクセス集信装置が PADO (PPPoE Active Discovery Offer) パケットを返し、集信装置が存在することとサービスを提供することを知らせる。ホストはアクセス集信装置を 1 つ選び、セッションを開いてもらうために PADR (PPPoE Active Discovery Request) パケットを送る。アクセス集信装置は PADS (PPPoE Active Discovery Session-Confirmation) パケットで応答する。この後、プロトコルはセッションステージに移行する。

セッションステージでは、ホストとアクセス集信装置の間でイーサーネットフレームに埋め込まれた PPP フレームがやりとりされる。通常のイーサーネット MTU は 1500 バイトであるが、 PPPoE のオーバーヘッドに加え、カプセル化された PPP フレームによる 2 バイトのオーバーヘッドがあるので、 PPP インターフェースの MTU は最大 1492 バイトになる。 Linux マシンをファイアーウォールとして使用しており、ファイアーウォールの背後にあるインターフェースの MTU が 1492 より大きいと、あらゆる問題が発生しうる。実際、安全のためにファイアーウォールの後ろのマシンの MTU を 1412 に指定しておくことを推奨する。これにより、ヘッダに TCP オプションと IP オプションが入るという最悪の場合も許容できる。

最初はブロードキャストするようだ。

上のことを念頭において RFC2516 を読んでみると、5.1 The PPPoE Active Discovery Initiation (PADI) packet とかいうところから上とほぼ同じ説明 (もっと具体的) がある。


PPPoE ブリッジとは何か? ここを読んでみると、ようはルータが PPPoE フレームをスルーしてくれる?程度のものっぽい。


ひかり電話のセッション情報は起動時に PPPoE + HTTP で落としてくるみたいだけど、その設定ってどこにあるんだろう。NTT がレンタル機器を送るときに MAC アドレスを登録して云々みたいなことをやっているのかな?

  1. トップ
  2. net
  3. PPPoE ってどうやって

聴き上手になりたい。

それは例えば、喋らないことではなく、相手にいっぱい話してもらう程度を喋って、よく話しを聴きたい。誰かが何かを言いかけたとき、絶対に止めさせないようにしたい。かなり難しい、これって雰囲気とかで、才能なんだよなぁ。天性な聴き上手には絶対に勝てないのだ。

くだらない話をうだうだ続けるようになると、もう終わりだ。創造的でなくなる。時間を無駄にする。アジャイルじゃなくなる。例えばアイデアは伝えるものじゃなくて、吸収したものから出てくるものなんだと思う。アイデアは成果として残る。アイデアだけでは伝わらない。伝えようとしてはいけない。詳細なアイデアは相手の想像力を削るから。最低限でいい。果汁は50%でいい。それ以上は過剰。


誤解はいいことだ。誤解を理解し、さらに誤解すると、またアイデアがでてくることがある。そういう意味で、理解しあおうという試み自体は面白いのだけれど、あまり必死に理解だけについて考えると、いつまでたっても終わらない。誤解は誤解のままでいい。理解なんてどうせないのだから、誤解で発想を増やしたほうがいい。

  1. トップ
  2. life
  3. 聴き上手
  1. トップ
  2. thinking
  3. 聴き上手

工事立会いしてきた。

カラカラ (謎) にまかれた光ファイバーを家の中にとりこみ、ひっかけて近くの電線まで一旦伸ばし、そこから近くのハブまで伸ばしていた。かなり長い距離。

光ファイバーのケーブルは針金二本にはさまれて本体の細いファイバーがあるものだった。挟まれているので曲がる方向に制限がある。たぶんある程度なら踏んでも切れなさそう (中に浮いているので踏めないし、職員の人は踏まないように気をつけていたけれど)。どうやって光ファイバー繋いでいるかはよく見えなかった。専用の器具があって、被覆全部はがしてくっつけてるみたいだったけど、あんなんでうまくいくのか? という疑問が。プラスチックを溶かしてくっつける、とかそういうレベルなんだろうか。精度がどんなもんなのか謎い。

一回繋ぐハブを間違えたらしく、外側だけを全て張りなおしていた。大変そうだった。それは別として、他は手際がよくて、すごいなぁと思った。

後なんか専用の測定器で信号が届いているか確認していた。外側から確認していたみたいだけど、漏れの光を見る装置なのかな? 信号が届いているか (? ロードとかなんか) 信号強度みたいな数字 (15, 28, 29) を喋って調節していた。やっぱ接合部分を調節していたのだろうか (そのときは室内だったので外で何をやっているかわからなかった。同時に自分が存在できたらいいのに、と思った)


職員さんのスピードテスト (フレッツスクエア) では 50Mbps ちょいぐらい。帰った後に Radish で自己測定すると、東京で 30Mbps 程度、大阪で 25Mbps 程度 (XP デフォルト)。上りが安定しなくてかなり遅くて、10Mbps 前後だった。うーん。

テスト時の構成: ONU -> RT-500NE -> PC のスタンダードな構成。プロバイダ OCN。プランは東日本フレッツハイパーファミリー+ひかり電話 (VoIP)

時間があんまりなかったので数回軽くテストして帰ってきた。実際の構成でどうなるかはわからない。

ちなみにルータへの設定は職員の人が勝手にやってくれた。PPPoE の設定とかもだけど、パスワードとか ID とか打ち込んでもらっていいのだろうか、ってちょっと思った。


ところで VoIP って「ヴぉいぷ」って読むんだ (ヴぉいすとかけてる?) 「ぶいおーあいぴー」って読んでた。


カラカラといえば七姫物語だなぁ。そういえば最近見かけない。そろそろ出る?とか聞いた気もする。

  1. トップ
  2. net
  3. ひかりの工事

神崎さんの話目当てで行って来た。

  • CSS の話があんまない。
  • XHTML って名前だけで ill-formed とか勘弁して!
  • RDFSPARQL やろうよ
  • GRDDL くるかもよ
  • XSLT! XSLT!
  • ウェブのインフォーマルな良さと、フォーマルな応用性を繋ぐのが重要なんだよ

結構マニアックな方向の話だった。会場の人で「well-formed」なんて聞いたことがないという人が多くてびびる。今回の話をきっかけにちゃんとそういうことも考えてくれたらいいなぁとてきとうに思った。

SPARQL の話とデモは、なんとなくイメージが掴めて面白そうな感じ。


かなり人が多くて、立ち見だった。抽選の応募がケイタイからだったのだけれど、ケイタイが圏外だった。MacBook が欲しくなった。関係ない。

  1. トップ
  2. css
  3. CSS Nite Vol. 10
  1. トップ
  2. web
  3. CSS Nite Vol. 10
  1. トップ
  2. sw
  3. CSS Nite Vol. 10

fb2k

iTunes インストールして、アンインストールして、なんとなく勢いで fb2k をバージョンアップしてカスタマイズしなおした。

Columns UIMusic Browser を入れて、似非 Rhythmbox 化した。(Rhythmbox を使ってないのは、ubuntu LTS にしたとき USB Audio にやたらプチノイズが入るようになったため)

Columns UI の layout 設定

Columns UI を画像のような、左プレイリストスイッチャー・右上左アーティスト・右上右アルバム・右下プレイリスト設定に。

でもちょっとアーティスト一覧が気に入らなくてごちゃごちゃやった。自分は ~/music/artist_name ってディレクトリを作ってて、割とどうでもいいアーティストは ~/music/他のアーティスト にまとめて突っ込んでる。だから id3 のタグを読んでひっぱりだされると邪魔くさい。直下ディレクトリを「アーティスト名」として扱ってほしい。

Music Browser の設定の Panels から Add, Artist:Artist, Format:$left($put(p,$substr(%_path%,$len("D:/home/cho45/music"),$len(%_path%))),$sub($strchr($get(p),\\), 1)), Precedence:0 して、右上左のパネルをこれに設定した。

この Format 書くのに果てしなくハマりまくって困った。$strstr も $strchr も 0 しか返さなくてなんでよって思ってたら、単にカンマの後にスペース書いちゃいけないとかいう罠だった。40分ぐらいハマった。

この設定だと Browser の Album が絞込みされないなぁ。むしろ Album 選択すると逆に Artist が絞り込まれちゃう。おかしいなぁ。Precedence の設定がおかしいのかなぁ。逆にしてもだめだなぁ。

パネル設定をやりなおしたらいけた。

  1. トップ
  2. music
  3. foobar2000 v9

vim7 のメニューで補完

css.vim がバグってんだよ。vim7 なら直ってるよ という書き込みがあったので vim7 にするよ! 嘘だよ! ホントは vim7 じゃないとかありえないらしいからだよ><

動機はともかく vim7 を入れた。TECHMemo - vim7のインストール を見てそのままインスコ。そのまま起動。

C-n, C-p での補完がメニューになった。HTML で要素名補完・タグ補完が効く (C-x C-o)。CSS 読んで class, id 補完するやつはエラーでて動かない、けど、特に困らない。

C-n, C-p の動的自動補完がメニューになったので、xyzzy のポップアップメニュー版っぽくなった。気持ちいい。

画像は perl モードで C-n 補完したときのやつ。もともと (vim6) がどうだったかやってないから知らないけど、C-n 押した瞬間に vim が頑張ってスキャンするのが面白い (ストレス溜まるほどは遅くない)

.vimrc に以下の設定を加えて、TAB で補完がでるようにした。xyzzy では C-SPC で動的補完にしてるんだけど、C-SPC だと IME のバインドをかぶるので TAB に。TAB がどうしても入力したいときは C-v TAB で入力できるみたいだ。

imap <TAB> <C-N>
" オマケ indent-whole-buffer
noremap <F8> gg=G``
  1. トップ
  2. linux
  3. さらに vim7 に
  1. トップ
  2. vim
  3. さらに vim7 に

なんか微妙

ブックマーク的なフレンド機能じゃなくなって、承認制みたいになってしまった。ブックマーク的な使い方がしにくくなるなぁ。

  1. トップ
  2. web
  3. Last.fm が変わったけど

今日 NTT からひかり電話用にルータが届いたので構成を考えた。

少し前から NTT のルータは二段目にしようと思っていたのだけれど、調べてみるとどうやらそうするのは無理らしい。というのも SIP プロトコルで通話用のセッションを初期化するとき、VoIP 端末が自分のグローバル IP を知っていないといけないからみたいだ。もし NAT の内側に設置したいならば、ルータが SIP プロトコルを解釈してメッセージ中の IP を書き換えたりもしないといけないとかなんとか。(SIP-NAT)

結局どうすれば NTT のルータを通過せずにネットに接続できるかというと、ONU 直下にハブをつけて、それにルータをぶらさげる形にするらしい。

配線図

30 :不明なデバイスさん :2006/04/18(火) 20:10:46 ID:N78uXhwt
>>28
買わんでもルータにHUBがついとるがな
ケーブルは、も一本いるけどな

31 :不明なデバイスさん :2006/04/18(火) 20:54:44 ID:W7PvBfmV
>>30
それって、ONUからひかりのルータのLANにつないで、
ルータ自身のWANとLANをつなぐであってる?


32 :不明なデバイスさん :2006/04/19(水) 00:12:52 ID:MwCD1t9J
>>30-31
それやったらループバックするからマズいだろうがw
どういう挙動するかわからんけど。

当初の目的はこうしたいんでしょ?
http://voip-info.jp/index.php?%A4%D2%A4%AB%A4%EA%C5%C5%CF%C3Tips

33 :不明なデバイスさん :2006/04/19(水) 12:39:48 ID:2xHg8lhS
>>32
IPv6ブリッジとPPPoEブリッジ無効にすれば問題なし。というか前とか前々スレではよく出てきた話。
インターネットで負荷がかかっている状態で電話大丈夫かとかあるけど、まあそれはDSCP優先しないハブ入れても同じだし。

34 :不明なデバイスさん :2006/04/19(水) 14:00:37 ID:qh6q5Xjp
ひとつの機器だと考えるから、自家接続はまずいと思ってしまうのだろう。
ルーターも内部的にはHUB部分+ルーター部分に別れているわけだ。
ONUの次にかますHUBに、ひかり対応ルーターのHUB部分を利用しようという
話なわけだな。
せっかく付いてるHUBを使わずにおくのは、電気代の無駄ってものだろ。

さてうまくいくでしょうか。VoIP 側が PPPoE している間って、PC 側の PPPoE は切断されちゃう?よなぁ。初期化のときだけだけど、気になる。実際運用してみないとわからないことばっかり。


VoIP 関連の用語列挙

SIP (Session Initiation Protocol)
電話っぽいセッション確立プロトコル
SDP (Session Description Protocol)
SIP の body 部分を使われるプロトコル
RTP (Real-time Transport Protocol)
音声信号を実際に通信するプロトコル

@IT:VoIPに耐えるネットワーク構築(2) の図がわかりやすかった。

  1. トップ
  2. net
  3. VoIP, ひかり電話, NAT

CRON って cron.hourly とかを run-parts で実行するけれど、なんだか実行されている気配のないスクリプトがあって悩んだ。

結局ファイル名が悪かったみたいだ。log.sh という名前にしていたのだけれど、これだとだめらしい。httplog に改名したらちゃんと run-parts --list でリストされるようになった。


man 見てもどうもわからなくてわかるまで時間がかかった。結局最後は試行錯誤っていう。

  1. トップ
  2. server
  3. CRON の run-parts でハマる
  1. トップ
  2. linux
  3. CRON の run-parts でハマる

「気をつけていること」って書いたけど、実際にはほとんど無意識ぐらいで「こうしたほうがいいな」って思いながらやっているのを書き出しただけで、あの規則ありきで書いているわけじゃないのです。

結果的にああなったぐらいのもので、わりとどうでもいいものです。書き出したのは、書き出すことで、本当にそれでいいのかっていうのを明確にしたり、曖昧なところを「曖昧なところ」として認識するためで、守るために書いたわけじゃないです。

例えばあれだと一つのファイルのまとめて書くことを前提にしてるから、ファイルを分けたときどうするかっていうのは全然わかってない。普通に考えたら、ある ID セレクタ以下を一括して分離するだろうけど、実際そうやって書いたことはないからなんともいえない。手探りいんぐ。

  1. トップ
  2. css
  3. 気をつけていること

Emacs の設定に嫌気がさしたので (ネガティブドリブン) 、vim に乗り換えるよ!

ubuntu 6.06 LTS の vim は VIM - Vi IMproved 6.4。css.vim のロードがいつも失敗する。

とりあえず覚えた (覚えてた) コマンド列挙

  • :w
  • :q, q!
  • i
  • v
  • V
  • C-v
  • u
  • C-r
  • y
  • p
  • P
  • dd
  • gg
  • G
  • /{search-string}
  • s/{s}/{r}/gc
  • ==
  • ^
  • $
  • o
  • !!cmd
  • gg=G

現時点での .vimrc

syntax on
colorscheme desert256
highlight ZenkakuSpace ctermbg=6
match ZenkakuSpace /\s\+$\| /
set listchars=tab:>.
set list
" バックアップとか自分でしろ
set nobackup
" 誰かが編集したら読み直して
set autoread
" 袖あまりは良いものだ
set scrolloff=10
" 行番号の表示
set number
" デフォルトインデント設定
set autoindent smartindent
" よさげなタブ
set smarttab
set softtabstop=4 tabstop=4 shiftwidth=4
" BS の挙動
set backspace=indent,eol,start
" よしなにしてくれ
set ignorecase smartcase
" インクメンタル
set incsearch
" 最初にもどれ
set wrapscan
" 対応する括弧の表示
set showmatch
" 入力中のコマンドを表示
set showcmd
" 行頭・行末間移動を可能に
set whichwrap=b,s,h,l,<,>,[,]
" 補完候補を表示する
set wildmenu
set laststatus=2
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']['.&ft.']'}%=%l,%c%V%8P
set termencoding=utf8
set encoding=japan
set hidden
filetype plugin on
filetype indent on
noremap # :call ToggleCommentSelection()<CR>
" http://peace-pipe.blogspot.com/2006/05/vimrc-vim.html
" current syntax
command! -nargs=0 GetHighlightingGroup echo 'hi<' . synIDattr(synID(line('.'),col('.'),1),'name') . '> trans<' . synIDattr(synID(line('.'),col('.'),0),'name') . '> lo<' . synIDattr(synIDtrans(synID(line('.'),col('.'),1)),'name') . '>'
augroup MyAutocmd
au!
au BufNewFile,BufReadPost  vim   let b:commentSymbol='\"'
au BufNewFile,BufReadPost  *.c,*.h,*.cpp,*.d,*.java,*.js   let b:commentSymbol='//'
au BufWritePost * if getline(1) =~ "^#!" | exe "silent !chmod +x %" | endif
augroup END
" 現在行をコメントトグル
" 選択中はその範囲を
function! ToggleCommentSelection() range
if exists('b:commentSymbol')
let cs = b:commentSymbol
else
let cs = "#"
endif
let cl = a:firstline
while (cl <= a:lastline)
let line = getline(cl)
if strpart(line, match(line, "[^ \t]"), strlen(cs)) == cs
let i = 0
while (i < strlen(cs))
normal! ^x
let i = i + 1
endwhile
else
execute "normal! I" . cs
endif
normal! j
let cl = cl + 1
endwhile
endfunction

と、同時に、.zshrc を vim の第一引数を screen の window 名にするように書き換えた。

  1. トップ
  2. vim
  3. vim に乗り換えるよ!