Middleman v4のExternal Pipelineてpreprocess全般に使えるのでは?

ちょっと試しに 4.2.1 でやってみたんだけど、

activate :external_pipeline, {
  name:    :dumb_command,
  command: 'echo "dumb command ..."',
  source:  ''
}

みたいな設定が可能ということが分かった。

つまり、

  • External Pipeline は名前をつけて外部コマンドを呼ぶだけなので、build 前になんでもさせられる
  • ただし、source 指定は必須なので空文字を入れておけば ok
    • nil はダメ

ということか。

外部の API からデータを取得するとかもこれでイケるんだな。Data Files を保存する何かを作ってしまえばなんでもできる。Headless CMS との連携とか。無理に内部構造を理解して Extension を作る必要もない。1

これ、いいんじゃないか?

順番はどうなる?

複数の External Pipeline を指定した場合、

  • 実行する順番は activate した順番
  • ただし build 時以外は default ではスレッドで動くので external pipeline の 実行結果を得る順番は保証できない
    • disable_background_execution: true 指定を加えると制御可能

ということは

  1. 順番に依存する処理を watch 時に行わないのが基本
    • どうしてもという場合は disable_background_execution: true 指定を追加
    • その場合は hot reload / live reload 系はたぶん無理
  2. 順番に依存する処理はそれを起動する sh script などの方で制御する

といった工夫が必要になる。

ちなみにコードで言うとこの辺

class Middleman::Extensions::ExternalPipeline < ::Middleman::Extension
  self.supports_multiple_instances = true

  option :name, nil, 'The name of the pipeline', required: true
  option :command, nil, 'The command to initialize', required: true
  option :source, nil, 'Path to merge into sitemap', required: true
  option :latency, 0.25, 'Latency between refreshes of source'
  option :disable_background_execution, false, "Don't run the command in a separate background thread"
..
    if app.build? || options[:disable_background_execution]
      watch_command!(false)
..
  def watch_command!(async)
    @current_thread = ::Servolux::Child.new(
      command: options[:command],
      suspend: 2
    )

    @current_thread.start

    watch_thread = Thread.new do
  1. もちろん CMS 提供側としては gem で配布できることはアピールポイントになるのでちゃんと Extension 作った方がいいけど。 

VirtualBox の NAT の設定

VirtualBox のネットワークの設定は NAT がデフォルトである。NAT ということは Guest から外に出て行く分にはいいけど、外から Guest に ssh などで接続しようとしたときに Host OS の port と Guest OS の port を map する必要がある。

で、その方法をヘルプより抜粋。

You can set up a guest service which you wish to proxy using the command line tool VBoxManage. You will need to know which ports on the guest the service uses and to decide which ports to use on the host (often but not always you will want to use the same ports on the guest and on the host). You can use any ports on the host which are not already in use by a service. An example of how to set up incoming NAT connections to a ssh server on the guest requires the following three commands:

VBoxManage setextradata "Linux Guest"
  "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" TCP
VBoxManage setextradata "Linux Guest"
  "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" 22
VBoxManage setextradata "Linux Guest"
  "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" 2222

※ Windows 版にもこのコマンドは存在する。

実はこの設定について GUI からは方法がないのは以前から知っていたんだけど、調べるのが面倒で Q.app と VirtualBox をいったりきたりしていた。でももうこれで Q.app をやめることができそうだ。

本当は extradata でこんな長い文字を打たせなくてもいいように network の設定をうまく抽象化してほしいなぁとは思うところだけど、それは今後に期待ということにしよう。

Merb が意外に環境を選ぶ

最近評判のいい Merb にちょっと興味が湧いてきたんだけど、

  • RubyGems 1.3.0 以降
  • hoe 1.8.0 以降
  • Ruby 1.8.6 以降(この情報は本家で見つけられなかった)

など、結構新しめの環境を要求する。

特に問題になりやすいのは Ruby 1.8.6 以降で、この段階で CentOS 5 や Debian etch など、stable なサーバとして採用されていそうな環境では標準のパッケージで動かすことができない。

Debian lenny は 1.8.7 なので Ubuntu 8.04 LTS でもいいんだよな。もう Debian 系は素の Debian やめて Ubuntu LTS にしようかな。Ubuntu LTS の方がリリースも信用できそうだしなぁ。

OmniGraffle でグリッドを有効にしたテンプレートを作成

グリッドを表示する

OmniGraffle はワタシが最も気に入っているドローツールなんだけど、

  • デフォルトでグリッド線が表示されていない
  • グリッドにスナップする設定になっていない

のがちょっと物足りない。

手早くそれなりに見栄えのするダイアグラムを描こうとする場合、まず適切なグリッドが大事だと思う。幸い OmniGraffle のグリッドは特に設定し直す必要はなく、有効にするだけで十分使いものになる。

ただ表示設定の変更を毎回しなくちゃいけないと面倒くさい。OmniGraffle の場合、この辺りの初期設定はアプリケーションレベルではなく新規ダイアログ作成時に選ぶテンプレートに保存される。したがって、まず

  1. あちこちの設定を好きなように変更
  2. これを [ ファイル ] → [ 書き出し ] で「OmniGraffle テンプレート」を選んで保存
  3. 保存したテンプレートファイルを以下のフォルダに保存
~/
`-- Library/
    `-- Application Support/
        `-- OmniGraffle/
            |-- Scripts/
            |-- Stencils/
->          `-- Templates/
                `-- TEMPLATE_NAME.gtemplate

するとこのテンプレートが利用できるようになる。

テンプレートセレクタでデフォルトに

また、テンプレートを選ぶ際に [ デフォルトとして設定 ] をクリックすると cmd + N で常にそのテンプレートでダイアログを作り始めることができる。

うん、これこれ。やっと手に馴染んできた1

  1. 以前 3 Pro のときもこれやってたんだけど、方法を書き留めてなかったので、5 になってからデフォルトのままになっていて不便だった。 

Apple の Wireless ペチペチキーボード触った

※ ちょっと前のことを思い出しながら書くメソッド

Apple のキーボード変わったじゃないですか。ずいぶん前だけど。気になってはいたんですよ。Real Force をせっかく買ってすぐぐらいだったから。

で、今ごろになって実物触ってみたんですよ。店頭に置いてあったフルキーボードの方だけど。

  • やっぱ感触がよくない
    • 正直、PowerBook のキーボードの方がいい
    • MacBook に慣れている人は大丈夫かもしれない1
  • かっこはいい

ヘビーに使うにはどうかなという感じだけど、リビングPC で使ってオサレを演出とかするような変な目的にはベストマッチかもしれない。JIS 配列派なので CapsLock のディレイに悩むこともないだろうし、何かの拍子には買うかもしれない。買わないかもしれない。小さいキーボード好きにはやはりこうクルものはありますけれども、そこはそれ。欲しがりません勝つまでは(何に?)

  1. もしかすると自分はキートップのカーブが好きなのかもしれない 

samba と netatalk その2

ユーザー管理を具体的にどうするかはとりあえず置いておいて、グループに分けてアクセス権限を設定して使うって形についてはだいぶつかめてきた。今のところシステムアカウントべったりでテストユーザーを作って同じものを pdbedit でも作っているような状態なので、このまま大人数の管理はできないけど。1

いま気になっているのは

  • apple double のリソースフォーク ._* ファイルが Windows から見えて気持ち悪い

ってこと。これは

  • Mac からは必ず afp で接続する
  • Windows の Explorer で隠し属性ファイルを表示しない

のどちらかが成り立っていれば問題ないんだけど、実際そんな状況ではないので、どうしても Mac の smb 接続が作った ._* ファイルが Windows から見えるという事態に。

Mac OS X 10.4: ネットワーク接続時に .DS_Store ファイルの作成を抑制する方法(アップル - サポート - TIL)

によると .DS_Store の生成は抑止できるみたいだけど、リソースフォークの保存を抑止する方法はないのか?

Samba で veto files にドットファイルを入れればそりゃ見えなくなるけど、それやると Mac から smb 接続でファイルを操作する際にエラーが出て、なおかつファイル本体の操作は正しくできるというとても気持ち悪い状態になる。preexec で新規接続のたびに ._* を削除するとかふざけたことも思いついたが、さすがにそんなことはできないよなぁ。

  1. これについては FreeBSD の pw を使って Linux の newusers 相当のスクリプト書いて、さらにそれを利用して pdbedit と newusers の両方を叩く wrapper 書けば両方で同じノウハウが使えるな、とかちまちま考え中。なんか無駄骨っぽいけど。newusers はしょせん登録だけだし、pw の Linux 版があればいいのに。 

銭形金太郎ゴールデン

おいおいおい。なんか普通の家賃の普通のアパートに住んでるよ? これ銭金なんだよね? まぁでもゴールデンじゃーあんまりひどいのは放送できないか。難しいなぁ。確かに深夜のビンボーさんはキテる人が多かったから、笑えるときは笑えるけどイキすぎてて引いちゃうこともままあったし。

mod_gzip を試してみる

LAN 内にあるサーバの繋がっている HUB の調子が悪いのか、ときどきものすごく遅くなる。HUB 換えろよという話は置いといて、mod_gzip 動かしたら少しはマシかなと思ってやってみる。

結果としては速くなった感じはしない。速いときは LAN 内だから十分に速いし、逆に遅いときは mod_gzip などで吸収できるレベルじゃなく遅い。安定して大量の転送があって、それが帯域を圧迫してますよという場合じゃないと効果が分からないんだな。速かったり遅かったりする場合は比べるのが難しい。

麻辣仙人うまい

今まで辛味スナックはカラムーチョがいちばんうまいと思っていたんだけど、これがいちばんになるかもしんない。東ハトの暴君ハバネロのシリーズ的な位置づけだけど、この辛味は唐辛子と山椒でおいしい。リング状ではなくラーメンスナック状の形も受け入れやすい。

今のところオレ評価はこんな感じ

ハバネロ
ただ辛いだけでうまくない
カラムーチョ
ヒーヒー言わせる味付けでうまいが、においがちょっときつい
麻辣仙人
辛く、においも気にならず、バランスがよい

OS X 用の VNC クライアント不具合?

OS X 用の VNC クライアント(VNC Dimension 0.7.1 / VNCThing 2.2)で

  • SSH経由の場合は OK
  • LAN内で直接接続の場合は NG

という現象が起きている。よく分からない。サーバ側が WindowsNT 4 Server + TightVNC (1.23?) なのがよくないのかも。NT 4 + TightVNC は安定感がイマイチな気もするし。どっちが悪いのか分からない。どっちかっていうと VNCThing 2.2 の方が繋がる。でも操作はやっぱ変。VNC Viewer 2.0.1 はなんかあんまり好きじゃなくて使ってない。

Opera 6 for Mac BETA2 遅い

これではちっとも Opera のありがたみがない。いや、確かに OS X で G3 500 + 384MHz が貧相なスペックだということは重々承知のうえですが。確かに Mozilla や IE よりは速いが、Chimera のある今、Opera のスピードには別段感動は覚えません。

なぜか広告が出ないのですが、まぁ BETA だからかな。表示の精度は Win版の Opera 6 よりよくなっていますね。ちょうど Win版の 7βを思い起こさせます。submit ボタンが Aqua なのはいい感じです。

でも、、、個人的には OmniWeb よりはマシって程度?

なんで Mac 版の Mozilla.org なブラウザは

accesskey を無視してるんですか? つーか、使い方間違ってる?

About

例によって個人のなんちゃらです