observe

分かっている人には分かっている事。
ちょっとはまったので、備忘録として。
以下、prototype.js という JavaScript のライブラリの話。


window.onload = function (){
alert("ウホッ");
}


まず、これが第一段階。
ロード時に、無名関数を使ってウホッと警告を出します。
むしろウホッに対する警告?
まあ、それはともかく、ここまではOK。

次の段階。


window.onload = function (){
alertUho();
}

function alertUho(){
alert("ウホッ");
}


さっきのを、関数でやっているだけです。
ここまでもOK。

そして次。


window.onload = function (){
Event.observe("div001", "click", func001(1), false);
Event.observe("div002", "click", func001(2), false);
}

function func001(num){
alert("IDはdiv00" + num + "です");
}


たとえとしてよくありませんが、これがなぜかうまくいかない。
具体的には、読み込んだ瞬間にアラートが出て、後は handler が云々いうエラーになってしまいます。
おかしいと思ったら、observeで呼び出されたメソッドには、必ずイベントオブジェクトを引数に持たせないといけないんですね。


window.onload = function (){
Event.observe("div001", "click", callBy1, false);
Event.observe("div002", "click", callBy2, false);
}

function callBy1(e){
func001(1);
}

function callBy2(e){
func001(2);
}

function func001(num){
alert("IDはdiv00" + num + "です");
}


これは確かに動きます…が、何か冗長な感じですね。
イベントを引数に持たせるとして、二つ以上の引数を渡す方法はないものか…?

まとまった資料がないため、JavaScript はどうしても体当たりで覚える方式になりがちです。
求む、よい資料。
プログラム | comments (28) | trackbacks (0)

バリデーション

フォームのバリデーション、と聞いても普通の人には分からないかもしれませんが、こういう経験はありませんか?

例えば、会員制サイトの会員登録。
メールアドレスが必須になっているのに、空のまま先に進んだら

メールアドレスを入力して下さい

の文字とともに、入力画面に戻されてしまった。

こういうのをバリデーションとか呼びます。validation です。

さて、本題。
自分用ツールでもこのバリデーションを一応かけようと思ったのですが、普通にかけても面白くない。
そこで、『Realtime validation using Ajax』というライブラリを使おうと思いました。
これについてはこちらを参照。

使い方は簡単で、prototype.js と validate.js を読み込んだ後に、自分で定義したバリデーションを.js ファイルなりで読み込ませるだけ。
順番は必ずこのとおりで。
バリデーションの定義も結構簡単で、正規表現が分かればすぐに使えます。
一応サンプル。

<input id="name" name="name">

上のタグに、『必ず入力して下さい』というメッセージを表示する場合。


Validator.register({
"#name" : {
"/^$/": "必ず入力して下さい",
"/*+/": "OK."
}
}


見てのとおりですが、一番上に対象のIDを指定、下に正規表現で条件と、表示メッセージを記述していきます。
複数のIDに指定する場合、それぞれを,で区切ればOK。
クラスでも指定できるみたいですが、なぜかうまくいきませんでした。

で、これを自分のアプリで使おうとしたら…動くには動くものの、FireBug がエラーを検出します。
どうやら、prototype.js のバージョン差の問題?
中身を解析する元気が出なかったので、今日はここまで。

せっかくなので、自分で簡易式のこれを作ってみますか…
続きは(元気なら)明日にでも。
プログラム | comments (29) | trackbacks (0)

これはきつい

昨日の夜親父と会ってきました。
色々話もできてよかった…のですが、その後異常な疲労感が。
まっすぐ歩いているはずなのに、何か横にずれていたり。
家に帰っても疲れが抜けず、そのままダウン。

そして、今日起きたら15時間経過していた上、寒気と喉の痛みが…
どうやら、風邪をひいてしまったらしいです。
抵抗力が落ちてるんでしょうか…
幸い、昨日の帰り道でドンキに寄って買いだめしておいたので、しばらくは何とかなりそうです。

後、そういうのを抜きにした体調ですが、何か下向きな気がします。
これ、本当に大丈夫なんでしょうか…
一応その辺も含めて親父と話はしてありますが、今の調子だと厳しそうだなぁ、と。
一日の半分くらい疲れて寝ているような状態なので、まずこれを何とかしないと…

今日はまだ、日記が書けるだけましな部類です。
日記 | comments (19) | trackbacks (0)

in_groups_of とか group_by とか

Rails の独自拡張機能で、in_groups_of というメソッドがあるのはちゅう君も書いているとおり。
簡単なようで実はミスしやすい、『配列を10件ごとに<div>で区切って表示』とかを簡単にやってくれます。


<%- @items.in_groups_of(10) do |group| -%>
<div>
<%- groups.each do |i| -%>
<%- break if i.blank? -%>
<%= i.name %>
<%- end -%>
</div>
<%- end -%>


こんな感じ。
@items は絶対 size > 0 な配列で、i には name というフィールドが存在する前提で。

これだけでも使いやすくて感動なのですが、group_by というメソッドもあるようです。
こちらは、配列の中に入っているオブジェクトを、あるフィールド別でグループ化してくれるメソッド。
言葉だととても伝わりにくいので、使い方はこんな感じ。
まずはコントローラで、こんな風に。


@items = items.group_by do |item|
item.created_at.year
end


続いてビューで、こう。


<dl>
<%- @items.each do |year, items| -%>
<dt><%= year %></dt>
<%- items.each do |i| -%>
<dd><%= i.name %></dd>
<%- end -%>
<%- end -%>
</dl>


今度は、さっきの i が created_at という datetime なフィールドを持っている前提で。
こちらは、このとおりに使えるのかは不明ですが、Ruby 1.9 から組み込み関数として使えるらしいです。
Rails からの逆輸入?それとも以前から想定済?

以前の案件で、作者を肩書き別でグループ化するというのがあって、必死でやったけどこれを使えばどう見ても一発です。
プログラミングって、ときどきこういう単純に知ってるもの勝ちみたいな事がありますね。
プログラム | comments (52) | trackbacks (0)

リラックス

何か、結局コードを書いている時が一番落ち着く…
酒に走ったりするよりよさそうなので、しばらく元気のあるときはコーディングにします。

で、Railsのプラグインを1個作りました。
その名も『mahjong』プラグイン。
簡単なビューの拡張で、麻雀の手牌を簡単に再現するためのもの。

<%= hand [1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 1, 2] %>

とか、こんな使い方をします。
はっきり言って<img>タグを使えば一緒なので、単なる自己満足。
単純に、プラグインがどうやって実現されているのかに興味があっただけです(単に、モジュール作ってrequireしたりするだけなんですね)。

で、せっかく作ったので自分のBlogに適用…と思っていたら、本文はDBに入っていて動的に呼ばれるんだから、単純にヘルパメソッド呼んだだけじゃ意味ないじゃありませんか。
永遠にお蔵入り決定。。。
むしろ入力支援用のフォームを、JavaScriptで作ればよかったのか…

夜も眠れないので、このまま朝までコーディングです。
プログラム | comments (44) | trackbacks (0)

closed

社長とみっちり話し合い、20日までお休みを頂いてきました。
会社をよくしていく事など色々あると思うのですが、当分仕事の事は考えないようにします。
それで様子を見て、何とか薬なしで回復にもっていきたい考えです。
…やっぱり、なかなか精神科の薬は、飲めません。

結局私の仕事を人に押し付ける形になってしまったのが、今一番悔しいです。
こうなる前に自分でストップできていれば、どこかでもう少し社内の改善について行動を起こしていれば…
と、思う事もあるし、考え出すときりがありません。

ただ、今回の件で社長や他の同僚みんなも今のままではいけないと認識しているのが分かったのはよかったと思います。
本当に、一人ひとりは最高の同僚ばかりだと思っているのですが、みんなまだ若いので先が見えていないんだと感じました。
そんな同僚に迷惑をかけないためにも、何とか自分と付き合っていこうと思います。

とりあえず、せっかくの休みなので久しぶりに親の顔でも見てきます。
話したい事も色々あるし、顔を見るだけでも落ち着く気がするので。
昨日の日記で心配をおかけしましたが、理解ある職場のおかげで何とか潰れずに済みそうです。
症状が悪化しないよう、ゆっくりやっていこうと思います。
日記 | comments (21) | trackbacks (0)

ついに診断が

体調がよくならないので、病院に行ってきました。
原因がはっきり心因性と分かっているので、即精神科です。

分かってはいたのですが、やはりこの手の医者は初診が面倒くさい…
何軒も電話して、やっと午後5時から予約完了しました。
まあ、適当にやっている医者よりは信頼できると思うので、これは仕方ない。

さて、診察の結果ですが…
やはりというか、なんというか、初期のうつ症状、だそうです。
家族が同じような症状を訴える姿を見た事もあるので、ああ、やっぱりな、というところ。
それでも自分がそう診断されるとショックだし、不安にもなります。
何より、自分がなってみないと家族ですらそのときの気持ちが分からない、そのことにもショックを受けました。

先生いわく、本来ならすぐに休めというところらしいですが、私が休んだら確実に会社が傾くので、そうもいきません。
私が優秀とかそういう事じゃなく、頭数的、案件の内容把握的に。
仕方ないので何とか交渉して、仕事を休まずに済む方向の治療をお願いしてみました。

…副作用のない坑うつ剤とか言われても、実際使わないと何とも言えませんね。
睡眠薬まではお世話になった事がありますが、さすがに抵抗が…
ともあれ、まずはこれを飲まないと話にならないそうなので、まずはそこから。

後は、仕事をしすぎたらだめだそうです。
今の弊社の環境は、客観的に見てやはりありえないそうです。
自分が中にいると割と普通に思えてしまうのですが、やはりおかしかった様子。
周りがみんなそれでやっているから、という考えも持つなと言われてしまいました。

結論から言うと、自分の治療をしつつ、何とか今の仕事を片付けて、それからしばらく倒れてろ、という事みたいでした。
今後私のような人を出さないためにも、会社の体制作りを頑張るつもりです。

弊社について、「それじゃ経営危ないんじゃないの?」とか、ほっとけ、と言いたくなる事も言われましたが、とりあえず医者にかかる事ができてよかった…
諸事情で、実家の家族には元気だと振舞わないといけないので、弱音の吐ける場があるだけでもありがたいですね。
願わくば、将来私が後輩にとってそんな人である事ができるよう。

さて、怖いけどそろそろ薬の時間です。
日記 | comments (250) | trackbacks (0)

rjs in rails 2.0

どうやらRJSの使い方も変わった様子。

例えば、こんなのを考えます。


<%= link_to_remote 'テスト',
:url => {:action => "test"} %>
<div id="target">
test
</div>


これに対応するメソッドは、こう。


def test
respond_to do |format|
format.html
format.js
end
end


この場合、test.js.rjsというファイルが必要になります。
その中身は今までとほとんど一緒。

page[:target].replace_html :partial => 'test'

ちなみに、xmlとかも指定できて、その場合はそれ用にtest.xml.erbとかが必要になります。
まあ、すべてrenderオプションで指定すればそれが呼ばれるわけですが。

例えば上の例で、RJSを使わない場合はこう。


def test
respond_to do |format|
format.html
format.js do
render :update do |page|
page[:target].replace_html :partial => 'test'
end
end
end
end


ちょっとめんどくさいですが、理にはかなっている気がします。
必ずフォーマットを指定するようになった、と。
REST対応の影響なんでしょうか?
Rails1.2でどうだったかは覚えていませんが…

ちなみに、JavaScriptが使えない事を考慮しなければ、こうも書けます。


def test
render :update do |page|
page[:target].replace_html :partial => 'test'
end
end


これは割りと早い。

viewの:updateを使うともっと簡単に。



<%= link_to_remote 'テスト',
:update => "target",
:url => {:action => "test"} %>
<div id="target">
test
</div>



def test
render :partial => 'test'
end


以上。
日本語でまとまったページがなかったので、自分でてきとーに。
ネタ元はこちら

Thanks a lot!
プログラム | comments (156) | trackbacks (0)

CSSメモ

とにかくすべてのmarginとpaddingを0にしたいんだ!という場合。

* {
margin: 0;
padding: 0;
}

こうすると、とりあえず全部リセットできます。
今日、会社で教わりました。

デザインセンスは皆無なのですが、それっぽく作れるCSSは結構好きだったりします。
ただ、細かいところで言うことを聞いてくれないんですよね…

自作Blogツールですが、現在管理部を作成中。
自分しか使わないのをいい事に、色々遊んでいます。
プログラム | comments (26) | trackbacks (0)

route 246

祖母の家に、前使っていた自転車が置きっぱなしなのです。
そこで、あの自転車を回収してこようかな、と…
町田から秋葉原まで、道をGoogle Mapで検索。便利な時代。
調べたところ、国道246号線を使えば、皇居まで一本で行けます。
これは、一週間くらい休みをもらったらやるしかない!
経験者の方、どれくらいかかりそうか試算をお願いします。

と、まあ、そろそろ休みが見えてきました。
2月のはじめくらいにまとめて頂こうかなぁ、と考えています。
掃除もしたいし、親戚に挨拶もしたいし…て、何か事務的な事ばっかりですね。
もちろん、サイトを移転する、とかも忘れてはいません。

ただ、自分用のアプリケーションというのは、無限の設計地獄に陥ってしまう事が多くて…
私の場合も、色々と迷走していて、まだ仕様すら固まっていません。
自分が使いやすいのが一番と分かってはいるんですが、どうにもとまらない。
机上の空論がとんでもない規模になる前に、何とか形にしようと思います。

明日から弊社も平常運転に戻ります。
皆さんも元気で出社/登校して下さい。
日記 | comments (62) | trackbacks (0)