のらねこの気まま暮らし

技術系だけど、Qiita向きではないポエムとかを書くめったに更新されないヤツ

だいたい今日の話

Twitterのログから漁ってみた今日(だと認識している期間)にやったこと

CSSがキャッシュされてしまってうわー

@mizuki_r
css変更しても即時反映されないな。どこかでキャッシュしてんのか

chromeのキャッシュを外してもキャッシュされてた。
varnishかnginxだろうと目星をつけたが一朝一夕には片付かない気がしたので、テンプレートに直書きして検証・FIXしたら外出しするように。
いつの間にかキャッシュ効かなくなってて、「何が起きたのかわからねぇが」状態

Vimのプラグインが壊れたので消去と再生の仕事

ZenCoding.vimを入れる -> neocompcacheが効かなくなる

原因としては、プラグイン管理で使っているVundleの操作を間違えたことに起因するかもしれない。
また、ZenCodingとneocomplcacheは衝突するらしい。

とはいえ、一旦gitのsubmoduleを全部消し、BundleInstallでやったら動いたので、たぶんなにか余計なことをしていたのだろう。
neocomplcacheの補完は復活したが、snippets補完の機能が使えないままだった -> 後述。解決済み。

uni-formを使ってみた

CSS書くのがだるい。デザインのセンスが無い。
という方にオススメ、CSS Framework「Bootstrap」を使えばセンスが無くても時間が無くてもあっさりモダンなビューを構築できます!

でもBootstrapはBootstrap臭いので使いたくなかった。

でもformのデザインは本当に面倒で、CSSもHTMLも複雑になりがち。
そこで、簡単にデザイン出来る方法がないか、ちょっと調べてみた。

uni-form
https://github.com/draganbabic/uni-form

調べた結果、良さげなデザインをお手軽に、かつ自分好みだったuni-formを導入してみた。
validationツールもついていて、CSSもHTMLもややこしくせずに構築できて便利。

Validator::Customとuni-form-validationの話

uni-formのバリデーションツールと、mojoで使われているらしいValidator::Customを使ってみた話。
特に書くことが思い出せないので後日思い出したら。

neocomplcacheの変更にあわせて設定をいじった話

@mizuki_r
neocomplcacheにsnippetsのコマンドが無いんだけど。何がった

とつぶやいたら、@ShougoMatsu さんからリプが来て、snippetsがneocmplcacheから分離したことを教えていただいた。

vimrcに以下を追記して、:BundleInstall でsnippets復活。

Bundle 'Shougo/neocomplcache-snippets-complete'

under で return $self->redirect_to した話

@mizuki_r
$self->req->headers->header('X-PJAX')と$self->param('_pjax')のどっちで取るのが良いのだろう。記述量の少なさから後者なんだけど。

Mojolicious::Liteのcontrollerで、各ルートの事前処理を行なってくれるunderというメソッドがある。
このあたりの仕組は詳しく理解していないが、underに渡した値が真を返さないと続くControllerの処理が行われないそうだ。

なので、「条件にマッチしたアクセスはリダイレクトさせる」ような処理のとき、

return $self->redirect_to('/')

と書いてしまうと、戻り値が真(redirect_toの戻り値)が帰ってくるため、処理は中断されず、Controllerの処理が走ってからリダイレクトされるらしい。
ちょっとはまったのでメモ

Kolonとpjaxの悩ましい関係

@mizuki_r
うん。やっぱりpjax(cascadeしてないブロック) と 通常(cascadeし、pjax用のデータをinclude)のテンプレートの2つに分けるしか無いか

pjaxは、HTMLの一部分をajaxで取得し要素を書き換えることをやってくれる。
なんだけど、Text::Xslate::Syntax::Kolonの継承(cascade)を使っていると、「コンテンツの一部分だけを表示」がちょっとやりにくい。

なので、pjaxのリクエストが来たとき呼び出す用のテンプレートと、それ以外の時に呼び出すテンプレートを用意しなければならない。
とはいっても、通常呼び出すテンプレートは、pjax用のそれをincludeするだけなんだけど。

でも管理したりする上でちょっとややこしい -> 続く。

pjaxリクエストの判定についての悩み

@mizuki_r
$self->req->headers->header('X-PJAX')と$self->param('_pjax')のどっちで取るのが良いのだろう。記述量の少なさから後者なんだけど。

ソース読んでないのでなんとも言えない。どっちがいいのでしょうね?

pjaxでリクエストした直後に遷移しちまう話

a.pjaxにpjaxを割り当てていたが、pjaxリクエストが飛んできたすぐ後に遷移が発生する。
つまり一度のページ遷移に二回通信が発生している。pjaxできてるのにできてない!とすごい悩んだし、前も抱えていた悩み。

解決案はここにあった
http://reiare.net/blog/2011/11/03/jquery-pjax/

そして原因はこいつ

@mizuki
そして俺は気づいた。 pjaxで出力しようとしているテンプレートに :cascade layout の文字があることに

htmlの文字列があるとご丁寧に location.href = url してくれちゃうらしい。
もっと早く気付け俺。

Kolonのmacroとincludeについての悩み

@mizuki_r
includeしたとき、macroはスコープが違うものとして扱われる。そのため、includeした時、された時は同じスコープで宣言されてなければ無いものとして扱われる・・・・ということ?

さっきの続き。
言葉の表現が正しいかはわからないが、とにかくincludeできないよ。