vim の保存と同時にIE/Opera on Windows をリロードするデモ

遠隔オートリロード
動画と説明
reload.rb
本体
reload-config.yaml
設定

みたいなのの変化版。下地をバイト先をちまちま作って、使いにくかったのでスクラッチから結局書き直した。同じように HTTP 鯖を webrick で立てるやつです。

dl で win32api を読んでる。使うのは PostMessage。でもなんか、SetForegroundWindow がないとだめだったり、あるとでしゃばってきたり、なくても普通に動いたりと怪しいのでウゴカネーってときはそのへんみたらいいかも。あと mswin32 版じゃないと SEGV する。

EnumWindows で列挙して、タイトルがソレっぽいやつに対して F5 を送るだけ。Fx はこの方法だとリロードされない。残念。

設定の chain でリクエストあったときにさらにリクエストを出すことができるので、こいつのトリガひくだけで、ma.la さんの Safari のスクリプトも同時にひけます。


vim 側

command! AutoReloadOFF let b:autoReload_disable = 1
command! AutoReloadON let b:autoReload_disable = 0
augroup AutoReload
au!
autocmd BufUnload,FileWritePost,BufWritePost * call <SID>AutoReload()
augroup END
function! s:AutoReload(...)
" Check enable
if exists('b:autoReload_disable') && b:autoReload_disable != 0
return
endif
silent exe "!GET 'http://nina:4321/reload' > /dev/null"
endfunction
  1. トップ
  2. web
  3. 自動リロードで開発をアジャイルにするたった一つの方法!

中学のときの同級生3人と夜中にちょっとお話をしたんだけど、いろいろ面白かった。

やっぱ、外側から普段見えない部分とかって全然わからないもんだなぁとかなんとか。いろいろ考えてるなぁと、何も考えていない自分は思ったりするわけで、さてもう何が言いたいかわかりません。

そういえば、場合によっては、考えが固まった部分がぶつかっても、なるほどぐらいでうまく収まることもあるんだなぁとか。完全に個人に依存する部分だからか。


とにかく、アウトプットできることは全部アウトプットすべきだと思う。思ったことを文章化する試みをしたい。できないこともあるけど、してもいいかなってことは全部していきたい。公開。アウトプットできないのって何も考えていないのと一緒だ。せめて考えるフリぐらいはしとかないと。


めちゃくちゃ簡単そうに見えても、実際やってみると難しいことだらけだ。drb で簡単な P2P 実装を作ろうと思ったけれど全然頭回らない。単純に全てのピアに「通知」を送るだけなんだけど、なんども同じピアにきちゃうんだよなぁ……再帰的処理が苦手すぎる。頭悪すぎる。

  1. トップ
  2. life
  3. 引越し前日に
  1. トップ
  2. thinking
  3. 引越し前日に

やっぱ、疎結合のほうがいいなぁ。中身が見えない、中身を知らない。インターフェイスだけ。必要なものは 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. 開発用プロキシ鯖を設定より規約に