狂気の沙汰ほど面白い…!

自家用 Blog ツール向け、あほ機能その1。
『指定した位置に麻雀の牌姿入力支援フォームを出現させる』JavaScript ライブラリ。
画像が大きいので動作サンプルは追記にて。
無駄にビジュアルで現在の手牌を確認できたり、一枚だけ消去、とかできたりもします。

…誰が使うんだこんなのwww
ちなみに、無駄に動的にファイルを呼び出したりしているので、純粋な JavaScript ではなく、Ruby にちょっとだけ依存しています。
具体的には、ファイル指定がめんどくさかったので Dir.glob でさくさくと。
このメソッドも、なぜか正規表現が使えなかったりちと不便でした。
技術的には結構面白かったかな?
続きを読む>>
プログラム | comments (26) | trackbacks (0)

近況報告20080117

近況報告。
食欲は普通に戻りましたが、他は変化ない、というかちょっと悪くなってます。
睡眠が完全におかしくなっていて、12時間くらい起きては同じくらい眠り、の繰り返し。
しかも昼夜逆転気味なので、余計に疲れが溜まります。
風邪は治ったようなので、まだ様子見を続行。

後、パスタの価格が上がりました。
小麦の高騰のためとか…バイオ燃料とかの影響でしたっけ?
あれはとうもろこしだったかな?
ともかく、小麦の価格が上がるという事は、パンもうどんも値上がりする、しかねないという事です。
こうなったら日本人は素直にご飯を食べるべきか。
パンがなければご飯を食べればいいじゃない。

自宅のVistaがどうにもだめな子で、FireFoxが何かにつけて落ちます。
一番多いのが、タブを1枚だけ開いている状態でそのタブを閉じようとすると強制終了される、というもの。
タブ閉じるなよ、と言われればそれまでですが、気になるんですよ…!
FireBugを常にOnにしているので、これも原因の一端ぽいですが、原因不明。

JavaScriptの書き方、続き。
とりあえずこの記事は絶対に目を通すべき。
これを読んでおけば、配布されているスクリプトの意図も大体理解できるはず。
再配布可能なライブラリを!と意気込んでいる方は、メモリ関連のところをよく読むとなおいい、かも。
最初からこれを見つけておけばよかった…
日記 | comments (28) | trackbacks (0)

MacBook Air

今日の未明に発表になった、新型 Mac Book。
感想としては…欲しい!
お目当てのSSD型の方は38万円と夢いっぱいな価格になっていましたが…
ちなみに、バッテリーが5時間と書いてあったのは、HDDの場合なんでしょうか?
SSDの方が消費電力は少なそうな気がしますが、その辺どうなんでしょう。
後、うわさどおりにCDドライブすら外付けなんですね…
それで薄いとアピールしてしまっていいものなのか?

ジョブスに踊らされている気はしますが、これは欲しい。
物欲リストの2番手くらいに入れて、リザーブ。
うーん、年末ジャンボでも当てておけばよかった(何

やっと JavaScript が分かってきました。
すごく気持ち悪いんですが、この表現が肝。


var test = function (){
alert("ウホッ");
}


何をしているかというと、変数に関数を代入しています。
そして、その関数も無名関数を使っています。
どうやら、JavaScript においては


function hello(){
alert("やあ、湯気で気がつかなかった!こんにちは!");
}


この表現は関数の定義というより hello という変数に関数を代入しているイメージのようです。
つまり、下の表現はほぼ同じ意味って事になります。


var count = function (num){
alert(num + "です。");
}



function count(num){
alert(num + "です。");
}


どちらを使う場合でも、


count(3);


と書けば呼べます。
これが分かると、結構人が作ったライブラリが読めます。
まだまだ探っていくと面白そうな世界です…
日記 | comments (8) | trackbacks (0)

prototype 面白いです

色々分かってきて一番面白いところなので、メモ。
複数の要素を一気に監視したい場合。


window.onload = function (){
var elements = document.getElementsByClassName("elements");
for(var i = 0; i < elements.size(); i ++){
Event.observe(elements[i].id, "click", msg, false);
}
}

function msg(e) {
alert(Event.element(e).id);
}


これは簡単かつ結構面白い。
適当な要素をそれぞれの elements に与えておく事で、例えば Google Calender のように、複数の要素を動的に配置した上で監視、とかができますね。
同じ事を onclick でやる事も、まあ Ruby なり使えばできますが、こちらの方が圧倒的に読みやすいと思います。
プログラム | comments (54) | trackbacks (0)

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)