Angular.jsとBootstrapを競合させずに使う

普通にやったらアウトっぽい。

知らずにBootstrapに後からAngular.js突っ込んでてうまく動かなかったので、以下の手順でなんとかした。

  1. jquery.js, bootstrap.jsを外す。
  2. bower install angular-ui-bootstrap-bower --save
  3. angular.module()の第2引数でui.bootstrapへの依存を指定。
  4. Bootstrapのオリジナルの動作指定は使えないので、ここの下の方を参考に、HTMLを書き換える。

つーか最初からちゃんとやってればよかった。

Node.js, npmインストール時の注意

NODE_PATHを設定しないとnpm install -g ...で入れたモジュールは動作しない。こんな感じ。

# on ~/.bash_profile, ~/.zprofile

# npmは重いし、このコマンドの結果は頻繁に変わるわけではないので、生で入れてもいい
export NODE_PATH=$(npm root -g)

驚くべきことにこの情報がNode.jsnpmの公式に存在しない。

そもそもNode.jsに至っては、インストール方法が公式に載っていない。なんなんだろう?

nvmを使うと楽そうだが、今回はそれほど本格的に使うわけではないのでyumで入れた。少し古いが、普通に入る。

Vimで、式用コマンドラインモードの履歴をコピーする方法

Vimでは、ノーマルモードでのp, Pによるレジスタ貼り付け以外に、挿入モードでのCTRL-Rからの貼り付けがある。

貼り付けられるレジスタにはいくつか特殊なものがあるが、特に=の挙動は変わっていて、これを入力すると、式用のコマンドラインモードになる。

このモードで入力した文字列は式として評価され、その戻り値が貼り付けられる。

簡単だが式が長くなるような計算などで便利でよく使うのだが、今回、入力した式の方を後から再利用したくなった。

コマンドラインモードの履歴を扱うには、コマンドラインウィンドウを開けばいい。

通常のコマンドラインモード用なら、q:でおっけー。:qを打ち間違えることで出てきたりするので、多分みんな知ってる。

検索用ならq/, q?.

だが、式用のキーバインドが見つからない。q=にはなにも割り当てられていないようだし。

ということで:h q:から調べてみたところ、

1. コマンドラインモードで、オプション 'cedit' で指定されたキーを使う。
   'compatible' がオフのときの既定値は CTRL-F である。

これで開けるということだった。今回の場合、i_CTRL-R_=で式用コマンドラインモードを開いた上で、CTRL-Fを入力することで行けた。

便利。とはいえq=も欲しかった。

HTML(など)で使うURIの相対的な表記方法についてまとめる

いい加減「ネットワークパス参照」とか覚えたいので。

とはいっても、基本的にはRFC 3986を読めば書いてあるのだが。

Uniform Resource Identifier (URI): 一般的構文

  • // で始まるやつ。
    • 「ネットワークパス参照」
    • 昔はあまり見なかったが、httpsや、外部でホスティングされているJavaScriptの使用が流行ったせいで最近ではけっこう見る。
    • この名前だと誰も覚えられないと思う。「スキーム相対」とかそんな感じにしてはどうか。関係ないがスキームとスキーマがどっちがどっちかも覚えられない。
  • / で始まるやつ。
    • 絶対パス参照」
    • 文書自身の位置を気にせずできるので便利。ただし、素人さんにこれで渡すと、手もとで見れない! となって面倒臭い。
    • 確かに絶対パスだけどこれもまた混乱する名前だ。「ドメイン相対」とかにしたら。それも微妙か。
  • それ以外。
    • 相対パス参照」
    • ./やら../やら、aaa/bbbやらで始まるの。
    • RFC確認して知ったけど、aaa:bbbみたいなのだと、スキーム名と混同されるるので./ちゃんとつけろ、らしい。これ考えると常に.で始めるべきかも。

それにしても問題は、人に伝えるときだ。どの表記方法も、正しい名前ではまず通用しないと思われる。

かといって十分に知れ渡った慣用名があるという感じでもない。実例を出しつつ伝えるのがベターか。

Cartonで詰んだっぽい?

  • Cartonの仕様上、site_perlになにか入ってるとcpanfile.snapshotが壊れる可能性がある。
  • Carton自体を入れるのにいくつかのモジュールがsite_perlに入る。
  • それらのモジュールのいずれかがcpanfile.snapshotでrequirementsに入っていると、carton checkがfail.

で、今回問題になったのがCPAN::Meta::Requirementsなんだけど、これcpanmやcarton経由で入るっぽいのでなんか詰んだっぽい。どうすりゃいいんだ。

carton check使わない? それしかない気はするが……。

追記: いろいろ試してたらなんかまともに動いたりしてさらに謎。なんなんだ。

ansible_ssh_userはansible_connection=localのときは意味がない

まあ、よく考えるとわかることだけど、ansible_ssh_user以外にユーザを指定する方法がなかったのでつい引っかかってしまった。

普通ならばansible_connection=localで実行する場合は、ターミナルでコマンドを叩くので、叩いたユーザの権限で実行されるのは自然なので引っかかることはないだろう。

今回なぜ引っかかってしまったのか。

  1. Windows上のVagrantでAnsibleでprovision.
  2. 通常はVagrantのprovisionはansible provisionerがあるのでそれを使えばいいが、Windows上では動かない(らしい)ので、AnsibleをゲストOSに押し込んでVagrant環境構築する - Qiitaを参考に、shell provisionerで実行していた。
  3. shell provisionerはデフォルトではroot権限でシェルスクリプトを実行する。
  4. VagrantもAnsibleもログ出力が微妙で、誰で実行しているのかなどは出力してくれない。
  5. Ansibleは、inventoryの設定に問題があってもエラーにしない。

あたりが原因か。

今後同じようなはまり方をしないためにどうすればいいか。

  • よく使われているソフトウェアといえど、特に一般的でない使い方をする場合は、一般的でない問題に引っかかる可能性が高いことを覚悟する。
  • もっとログやエラーを出させる。とはいえ今回の場合はログもエラーも役には立たなかったが。
  • もっと速い開発環境を! 再実行に時間がかかるのも、問題発見に時間がかかった原因。

難しいね。

追記。inventoryに限らないっぽい。

ちょっと気になったので、playbookやtaskごとでもuserやremote_userを書いて試してみたが、どうもまったく効かないようだ。

ansible_connection=local自体基本的に使わないようにした方がいいかも。

Firefoxで、POODLE対策としてsecurity.ssl3.*をいじってるとちゃんとTLSに対応したサイトにもつながらなかったりする件

security.ssl3.*という名前だけど、じっさいにはTLSの設定にも影響しているっぽい。

security.tls.version.min1にすれなどすればPOODLEはとりあえず大丈夫と思われるのでそっちで対応する。というかFirefox 34あたりでそれがデフォルトになってるはず。

詳細はこの辺かな。 The POODLE Attack and the End of SSL 3.0 | Mozilla Security Blog