ダイハツ情報
ダイハツを各種ブログ(Blog)から一括検索します。
トップ > results > results - 人気ブログ(Blog)検索結果詳細 (2009年1月9日 10時)
JavaScriptの難しさ(感想)
JavaScriptについて勉強してみてJavaScriptに対する違和感が少し和らぎました。しかしこの言語は本当に特殊ですね。(今更ですが)
JavaScriptの難しいところ。
言語仕様が特殊。(そろそろきっちりJavaScriptで勉強させて頂きました)
型が曖昧なところが書いててツラい。
イベントの処理が難しい(ブラウザ依存はもちろん、イベントの走り方に癖があるような気がします。シリアルに走ってくれない(?)とか。実際にやってみないと、そして慣れないと厳しいです)。
それから、DOM。要するにHTMLのタグを動的に操作するだけですが、これも体になじむまで時間がかかりました。またDOMで生成するHTMLを見て確認できないのは、脳内スタックエリアが乏しい私には大変厳しい。
(あーやだやだ。ありふれたことばかり言ってますね。これまでとは違う何かが分かったような気がしたんですけど。)
しかしGoogleマップなどで使われているJavaScriptは本当に凄いですね。(これも今更だけど)
以上
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2009年1月7日 19時13分
特定保健用食品(いわゆるトクホ)とか
健康エ○ナ(一応伏せ字)が実家から送られてきました。
食用油脂の価値については妻に洗脳されています。化学処理した脂が体にいいわけないよな、というのが最初の印象。でもまあせっかくだし使ってみるか。でもその前にWebで評判をチェックしておこう。
で、いろいろ見て残った印象は以下の二つでした。
・体によい根拠としている実験は疑わしい(意見)
・健○エコナにはトランス脂肪酸(発がん性を疑われる物質)が相対的に多く含まれる(事実)
はい。廃棄決定。まあ、さほど神経質になるレベルではないと思うんですけどね。体に脂肪がつきにくくても(疑惑あり)発がん性が相対的に高い(事実)んじゃね。しかも「健康」ってどうよ。実家にも「まああんまり気にするほどのことでもないと思うけど、敢えて使わない方がいいよ」とタレコミ。
調子にのってビオ○についても調べてみました。「弱酸性だから」「ビ○レママになろう」というキャッチフレーズのあれです。調査結果。化学処理していない石鹸の方が環境にも良く、体に優しい、との印象を得ました。皮膚科の医者からも石鹸を薦められる(妻談)という事実もそれを補強しているようです。まあ現段階では妥当な認識なのでしょう。蛇足ですがどちらも同じ会社さんが作ってます。一部で悪評高いメリ○トシャンプーも同様ですね。
中には面白い意見もありました。
曰く「化学的に加工する製品の方が、加工しない製品よりも優れている。なぜなら、安価で品質が一定のものが大量に作れるから」。
論理的には受け入れがたい意見ですが(だからといって毒性を含む製品を作ってもダメでしょうに)、この人の気持ちは分かるような気がしました。つまり何というか、実際そういうモノが売れてるし、疑問を持たずに使っている人も多い。喜んで使っている人だっているでしょう。マーケットもあるし働いている人もいる。スーパーに並んでる菓子を見ればマーガリン・ショートニング(トランス脂肪酸を多く含むため欧米では使用が規制されているらしい)を含まないものを探す方が大変。今さらそんなに敵視しなくてもいいじゃないか。
精製加工油脂の使用について日本人は量を取らないから問題ないだろうという意見も、私には同類に思えます。「まあそのあたりのことはかまへんやないか」の思想ですね。人によって許容範囲も違いますし、いろんな判断があっていいと思います。
しかし「健康」だとか「弱酸性だから」というキャッチフレーズには違和感がありますね。マーケティングって何?
いろんな意見や好み、重視するポイントがあるのはそれはそれでいいのですが、気がつくと身の回りには有害な製品ばかり。知らないうちにそんなものばかり選び(選ばされ)続けていた、そんな事実に後から気がつくようなことは避けたいと思います。
以上
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2009年1月7日 14時48分
vmware, eclipse, javaメモ
■vmware
△ブリッジ接続
ゲストとホストとの通信はできない。
ホストの仮想インタフェースと、ゲストのインターフェースのIPアドレスなどを同じにする
△NAT
ゲストとホストの通信ができる。
ホストの仮想インタフェースとゲストのインターフェースを自動取得にする
■eclipse
ctrl + shift + p で対応する括弧にジャンプ
■Javaの二次元配列
hoge[][]
左がrow(行)で右がcolumn(列)
以上
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2009年1月7日 12時6分
今さらながら入力補完JavaScript(9)~完
【段取り】
keypressイベントではなくsetIntervalを使って定期的に入力された文字列を読み取り、マッチする候補文字列をリストアップします。
【詳細】
focus時にsetIntervalを仕込みます。blur時、clearIntervalします。
上矢印、下矢印、TAB、ENTERキーのイベントは必要なのでそのままです。
文字列を読み取って候補をリストする処理をsetIntervalで呼び出すことになります。読みやすくするためメソッドにします。
【結論】
意外や意外、簡単に実装できました。相当苦労するんじゃないかとビビッてたんですが。
JavaScriptの経験が浅いのでこの辺の予測が弱いようです。
ディレクトリ構造は変更なしです。
WebContent
- js/prototype.js
- js/my.js
- a.html
- my.css
■my.js
// 外出しです。
var div1 = null;
var cursor_pos = -1;
var element_len = 0;
// cleraIntervalする対象です。
var tid;
// 定期的にテキストボックスをチェックします。
// いちいち再描画されることを避けるため、
// 以前に入力された文字列と等しい場合はスキップする必要があります。
var previousInput = "";
Event.observe(window, 'load', function(event) {
// イベントを登録します。
var keyevent = 'keydown';
if (window.opera || (navigator.userAgent.indexOf('Gecko') >= 0
&& navigator.userAgent.indexOf('KHTML') == -1)) {
keyevent = 'keypress';
}
Event.observe($('hoge'), keyevent, function(event) {
if (event.keyCode == Event.KEY_DOWN) {
if (element_len > cursor_pos) {
cursor_pos++;
}
var hogeTmp = $('div1'+cursor_pos);
initiateListColors();
hogeTmp.style.backgroundColor = '#00FF00';
} else /* elseをつけましたよ */
if (event.keyCode == Event.KEY_UP) {
if (cursor_pos > 0) {
cursor_pos--;
}
var hogeTmp = $('div1'+cursor_pos);
initiateListColors();
hogeTmp.style.backgroundColor = '#00FF00';
} else
if (event.keyCode == Event.KEY_TAB
|| event.keyCode == Event.KEY_RETURN) {
if (cursor_pos >= 0) {
var hogeTmp = $('div1'+cursor_pos);
$('hoge').value = hogeTmp.innerHTML;
}
$('candidate').style.visibility = "hidden";
}
});
// onBlur イベントを登録します。
Event.observe('hoge', 'blur', function(event) {
if (div1) {
// div1がnullでない場合はhiddenにします。
$('candidate').style.visibility = "hidden";
// ポジションを初期化します。
cursor_pos = -1;
}
clearInterval(tid);
});
// onFocus イベントです。
Event.observe('hoge', 'focus', function(event) {
tid=setInterval("listCandidates()",500);
});
});
function initiateListColors() {
var tmpElems = $('candidate').childElements();
for (var j = 0; j < tmpElems.length; j++) {
tmpElems[j].style.backgroundColor = "#FF0000";
}
}
// 外だしにしました。
function listCandidates() {
if (previousInput == $('hoge').value) {
// 入力された文字が変更されていなければ抜けます。
return;
} else {
previousInput = $('hoge').value;
}
// クリアします
$('candidate').innerHTML = "";
$('candidate').style.visibility = "visible";
cursor_pos = -1;
var i;
var size = -1; // <- 当たり前ですが重要です。
var rObj = new RegExp($('hoge').value);
for (i = 0; i < week.length; i++) {
// 入力された文字が一致していた候補を表示します。
var tmpSearch = week[i];
if (tmpSearch.match(rObj) != null) {
size++; // <- iではなくてsizeをincreしながら使います
// 文字列がマッチしていたらappendします。
var tmpId = 'div1'+size;
div1 = new Element('div', {'id' : tmpId });
div1.innerHTML = week[i];
div1.style.backgroundColor = "#FF0000";
div1.style.width = "100px";
$('candidate').appendChild(div1);
Event.observe(tmpId, 'mouseover', function(event) {
this.style.backgroundColor = "#00FF00";
});
Event.observe(tmpId, 'mouseout', function(event) {
this.style.backgroundColor = "#FF0000";
});
Event.observe(tmpId, 'mousedown', function(event) {
$('hoge').value = this.innerHTML;
$('candidate').style.visibility = "hidden";
});
}
}
element_len = size;
}
■a.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<script type="text/css" src="my.css"></script>
<!-- 変数をmy.jsより先に読み込む必要があります。 -->
<script type="text/javascript">
var week = new Array("hokkaido","aomori","akita",
"yamagata","miyagi","niigata","fukushima",
"ikkei", "komori", "higata");
</script>
<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/my.js"></script>
<title>Ajax tutorial - a</title>
</head>
<body>
<input type="text" id="hoge" name="hoge" />
<div id="candidate"></div>
</body>
</html>
■my.css(結局使わなかった・・・)
@CHARSET "UTF-8";
/* CSSは表示と関係ありません */
#div1 {
visibility:hidden;
}
このシリーズは以上で完了です。
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2009年1月5日 21時29分
今日の料理(パン、牡蠣のオリーブ油漬け、ナン・カレー)
まずはパン。
昭和の料理本。帰省中、暇にあかせてナニゲに眺める。昔から実家にあった本で、若かりし私(受験逃避中)も見てました。キッチンに保管されていたせいか、なんだか脂でベタベタしてる。昔もベタベタしてたかな。
パンのレシピを見ると「冷蔵庫で一晩発酵させるのもアリ」との記述があった。全体的に昭和40年代の本です。ほほう。パンを冷蔵庫で発酵させる、か。キワものっぽいな。でもちょっと待てよ。イケるんじゃないか。と思ってWebを検索すると・・・うん。今でもアリな模様。冷蔵庫発酵。
パンの発酵。せっかち料理人の鬼門です。だいぶ昔のことですが、私もパンの発酵で挫折したことがありました(この本を読むまですっかり忘れてた)。
レシピどおりに作って生地を発酵させる段階でのこと。レシピ本を見ると40~60分発酵させるとあるのですが、秋~冬に発酵させてもどうにも上手くいかない。なんとなく生地はヒヤっとペタっとしていて、発酵する気配がない。軽く膨らんだくらいでもういい!なんとかなるだろ!と諦めて焼いてみると、不味くはないものの、どうも納得いかないパンの出来上がりとなるわけで、その後、なんとなくパンを焼くという作業からは遠ざかってしまうことになる。
昔のリベンジ。いっちょやってみるか。
で、実家から戻ってワインを飲みながら生地を仕込み、寒い中半信半疑でタネをボールに入れ、ラップに包んで外に出しました。(冷蔵庫よりも少し暖かくてよさそうかな、と思って。)
こんな寒い中で発酵するんかいな。と思いながら眠り、その翌朝。(0時就寝、朝6時起床)
しっかり膨らんでましたよ。いや。驚いた。
携帯カメラ(発酵して大きくなったことを示すためA4ノートを並べてますが、発酵前の画像がないとわけ分かりませんね。すみません)
でも考えてみれば当たり前の話。酵母が活動を止めない限り発酵は進むわけで、それは温度とは関係ないのです。生地を切り分けて二次発酵へ。
携帯カメラ
二次発酵はちょっと甘かったかもしれませんが、結構美味しく出来ました。
携帯カメラ
画像を見ると白っぽいですがちゃんと焼けてますよ。朝8:30のプリキュア放映の前に、ひよこ豆のスープと一緒に朝ごはん。幸せな感じでした。またやってみよう。
次は牡蠣のオリーブオイル漬け。スーパーで牡蠣を買ってきたのです。さっきからベースとなっているのは徳永久美子という方の書いた本です。結構いい感じ。この人の店、dancyuにも出てたな。って覚えてる俺もどうよ、って感じで。
美味しかったですよ。牡蠣のオリーブオイル漬け。ちょっと高くつくのが難ですが、1シーズン1回はアリでしょうって感じです。
夜はナン+カレーにしました。
まずは生地をよく捏ねて(このナンは、上記の本の丸パンと同じレシピです。)
発酵させます。PCの上に乗せてます。CPUの熱を使いました。暖房はなし。1時間30分くらいかけて発酵させました。
中華鍋でナンを焼いて(見た目は地味ですがかなりウマーな感じですよ!)、
平行して作っていたひよこ豆のカレー(炒めタマネギ3個分含む)と共に頂きました。美味かったです。
以上
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2009年1月4日 21時9分
帰省メモ
■父との会話
父:不況はどうだい
私:今のところ関係ないね。そっちは?(父は某社を定年退職し、同じ会社に定年後契約社員として働いている)
父:もう工場のラインはストップしてる。そろそろ定年契約組は切られるんじゃないかと思ってるんだが、まだ音沙汰がない
私:でも工場に行けば何かしらやることはあるでしょう
父:何もない。痛みを分かちあおうとか皆で減給して雇用を守ろうと社長が言ってる
私:いい会社だね
父:株価は低い。困ったもんだ
私:株価が高い会社って何億も給料貰ってる経営者が、何千人も首切るようなところでしょ
父:そりゃそうだな
株価って何だ?
■食べたもの
12/31
夕食:石狩鍋 刺身山盛り
夜食:年越し蕎麦
1/1
朝食:雑煮
昼食:お好み焼き
夕食:ブリ照り焼き一山 煮豚 和風鳥ハンバーグ一山 ブリこぶ締め山盛り 根菜煮物 大根なます 黒豆煮物 えび煮物 伊達巻 蒸し牡蠣
太る前に死にそう
1/2
朝食:夕べの残り
昼食:インスタントラーメン
夕食:すき焼き(肉少な目で安心)
1/3
朝食:焼鮭 根菜煮物
昼食:パン
もうね。死ぬかと。
■祖母との会話
齢85。一人暮らし。耳は少々遠いものの頭脳は明晰。足腰も達者(人間足腰だ)。
祖母:あいつ(父)は叔父さんに挨拶もせんとぶつぶつぶつぶつ
私:へー。
祖母:(父の愚痴)
私:ほー。
いくつになっても親は子供にぶつぶつ言うもんだと。
以上
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2009年1月4日 21時13分
物欲がなくなってきた気がする
最近、といっても結構前からですが、欲しいものがありません(食材を除くハードウェア系)。なんだろうな。この感じ。
思い返せば、物欲出して買ったハードはBD-1が最後でした。一時期はいろいろ乗り回してましたが、今は普通にママチャリ使いです(買い物かごがなくてつらい)。
クリスマスや誕生日前に、妻に何か欲しいものない?とか聞かれても「う~ん。酒。焼酎のいいやつ(あるいはアイリッシュウィスキーのいいやつ)」としか答えられない自分がいます。しかも5年以上続けてそんな状態が続いている。
酒。私にとってはほとんど必需品です。買ってもらえれば嬉しい。でも、めっちゃくちゃ美味い酒なんてのはないと思っているので(まあラーメンみたいなもんですな。評判のラーメンはやっぱり美味しいけど、インスタントだってちゃんと美味しい)、「高い酒」は気分の問題に過ぎません。すなわちとても高くていい酒よりも、普段たまに奢って飲む酒(黒霧島とか1000円超のワインとか)が大量にある方が嬉しかったりして。でも、それってもはや物欲じゃなくてアルコール依存症。
正確に言えば興味を持つ対象はあるのですが、金を払って買おうとまでは思わない。昔読んだスーパーセールスパーソン養成系自己啓発書に「タダだったら欲しい、と見込み客が言えば、それは絶対売れる」、すなわちタダでも欲しいものは金を払っても欲しいのである、という旨の言葉があって、突っ込みどころはありつつも私はこの言葉を正しいと思っているのですが、その文脈で言えば今の私は、なんとなく欲しい気がしないでもないものをタダでくれると言われても断っちゃうかも、という状態です。
以下、興味を持つ対象とその理由、金を出して買わない理由を述べてゆくと・・・
■ビタクラフトのミルクパン
【理由】
今あるミルクパンがよく焦げ付くので気に入らない。
ゆで卵が少量の水で作れそう。
【買わない理由】
今のミルクパンがまだ使える(一生壊れない気がする・・・)
■スイス・アーミー・ナイフ(ワインのコルク抜き付き)
【理由】
これを携行していればいざという時でもワインのコルク抜きに困らない。
ナイフでチーズや硬くなったパンを削って食べることも出来る。
研ぐのが楽しそう。
【買わない理由】
外でワインのコルク抜きを使うことがまずない。
同様に外でチーズやパンを削ることもまずない。
目的もなしに外に持って出ただけで軽犯罪法に抵触(荷物検査受けたらアウト)。
■いいペティナイフ
【理由】
これでジャガイモとか手際よくむいたらかっこいいと思う。
【買わない理由】
安物の(かっこ悪い)ナイフすでにある。しかも研げば結構切れる。
■ミル・ミキサー・ミルサー・ジューサー・フードプロセッサーetc(差別化レベルが細かすぎてもう分からん)
【理由】
いわしやアジのつみれが作れそう。
たまねぎのみじん切りが楽そう。
パンをこねるのが楽そう。
【買わない理由】
つみれは包丁で叩いたら作れる。
たまねぎのみじん切りは苦行だが楽しい。
パンをこねるのは楽しい。
・・・昔友人に「君はあらゆるマーケティグのターゲットから外れる位置にいるよね」と言われたことを思い出しました。
要するに、理詰めで考えていくと、ほんとに必要なものなんてないってことなんですね。むしろ、捨てるべきものの方が多いのかもしれない。
それだけ知恵がついてきた(=年を取ってしまった)ということかもしれませんが、わけも分からずおもちゃを欲しがっている子供を見てると、何だか子供たちがうらやましいような、複雑な気持ちもあったりします。
以上。
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2009年1月7日 19時56分
一人でほぼ丸一日過ごした
妻と子供が先に私の実家に行ったため、今日はほぼ丸一日独りで過ごしました。
・子供はおじいちゃんとおばあちゃんが大好き(怒らないから。何でも買ってくれるから。遊んでくれるから。そりゃあ好きになるよな。)なので、できるだけ長くいたい。
・妻と私は独りの時間が欲しい。
という理由で、前回から帰省シフト制を敷いてみたのです。行きが妻で、帰りは私が担当。
子供らを見送った後、明日持ってゆくお土産を買いに池袋へ。まずはお散歩。東急ハンズまで歩いて上から下までざっと眺めました。う~ん。あまり物欲が湧かない。疲れてるのかな。調理用具コーナーで無難に丸型の焼き網(127円)を購入。野菜を蒸すのに使うつもりです。こういうのが欲しかった。100円ショップにありそうでなかったから。土産はやっぱりとらやの羊羹。なぜか分からないけどとらやの羊羹って団塊世代には格別(ステータス?)らしい。他の有名なお菓子を買ってもぜんぜん喜ばない。それから家に帰ってレンタルDVD「ケロロ軍曹」を返却。用事は以上。
昼食はちょっと奢ってスモークサーモン。とは言っても370円くらいだけど。それからバゲットを買って残りもののKiriクリームチーズと食べるつもり。さて。家に到着。独りでモソモソとスモークサーモン食べるか。バゲットを切ってチーズを塗り、スモークサーモンを乗せて美味そう。ぱくっと。あれ?スモークサーモンとクリームチーズって合わないぞ?スモークサーモンの風味がクリームチーズを圧倒して、クリームチーズの油がサーモンに余計なこってり感を与えてる。パンの風味も隠れちゃったし。ばらばらに食べた方が美味いや。淡々と昼食を済ませてまた独り。
楽しみにしていたんですけど、なんとなく手持ち無沙汰というか寂しいですね。第一やることがない。最近料理を趣味にしていますが独りで食べきれる量なんてたかが知れてますし、食べてくれる人がいなければ作る甲斐もありません。残り物のスモークサーモンをたっぷりの玉ねぎとマリネにして以上。
家で軽くピアノを弾いたり、WEB眺めたりして時間を潰して、漠然と夕方を迎えました。
それからBGM(Back Ground Movie)としてNHK教育テレビをつけて(おかあさんといっしょ/忍たま乱太郎/おじゃる丸(順不同))夕食の準備。かぼちゃが残ってるんだよなー。まずはかぼちゃを始末しなきゃ。
ビタクラフトに硬い茶漉しを置いて、東急ハンズで買ってきた焼き網を乗せます。蒸し野菜なので水が張ってあります。
かぼちゃを並べて
ふたをします。
5分ほどで火を止め、3分ほどふたをしたまま蒸らします。
はい。完成。うん。あまり甘くないかぼちゃだ。いまいちだな(悲しい)。でもいまいちながら味が濃くて、そのまま食べられます。蒸し野菜はいい。
他はこんな感じ。(つぶれてしまったけど右横は赤ワイン。パンと赤ワインはベストマッチ。スモークサーモンはやはり白ワインが美味かった。)
スモークサーモンのマリネはまあまあ。あー。そうね。って感じ。がっかり感がなかっただけでよしとすべきであろう。
なぜナイフがあるのかって?それはね。
昔上州屋で買った千円くらいの安物ナイフですが、砥ぐとそれなりに切れて楽しい。おじさんってこういうのが大好きなんだよ。
となんだかんだ言ってちゃんと独りメシを楽しみましたよ。
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2009年1月4日 20時57分
餅つき
妻の実家で餅つきを手伝いました。臼と杵でぺったんぺったんするやつです。
杵をずぽっと真っ白い餅から抜き、杵の重みに手を添える感じで臼にぼすっと落とす。(杵の重みだけで十分搗けます。テレビで杵をがんがん振り下ろしているのはパフォーマンスです。)しみじみ懐かしいこの感じ。いや、まいったホント懐かしいわ。思い出すのはもう10年以上前の、祖父の家で搗いた餅。
風呂場の釜にセイロを重ねて祖母がもち米をふかしてたなあ。ふけたもち米を父が小走りで運んで、臼に投入したっけ。祖父がそれを杵でねりねりと細かいリズムで搗く。いや、搗くというよりすり潰す。最初に潰しておかないと、搗く時に米が飛び散ってしまう。米が8割がた潰れてからようやく搗き始める。ぺったんぺったんと玄関で搗いたなあ。60後半になっても一臼を自分で搗きあげてた。孫にいいところを見せようとしたんだな。
最後の臼は必ず草もち。一キロほど離れた川辺で祖母が摘んだよもぎ(あらかじめ茹でてある)を、まずは餅なしで臼に投入。ぐりぐりと杵ですり潰す。繊維を断つわけですね。青臭い匂いがしたっけ。決して美味そうな匂いじゃなかったな。むしろ強烈な匂いだった。それからもち米を投入して、やはりねりねりと潰す。ヨモギの繊維が明らかに異質な感じで白いもち米に割り込んでいて、ちゃんと混ざるのかな。大変そうだな。と思うけど大丈夫。しばらく搗いていればちゃんときれいで美味そうなヨモギ餅になります。母親と妹と祖母は隣の部屋で餅を加工中。餡を詰めたり伸し餅にしたり鏡餅を作ったり。白い大福とヨモギ大福を交互に食べると飽きなくてヤバイんだよね。またこうやって作ったヨモギ餅は、本当に「草です。青臭いです。しかもヨモギです」って感じがする。春菊なんかよりよほど強力。市販のはヨモギ風餅。こっちは噛み跡がちゃんと繊維っぽい。そんなよもぎ餅を食べておなかいっぱいになってもう食べられない、食べないぞ。と宣言すると、父が「餅は消化にいいからな。食べても太らない」とわけの分からないことを言って煽ってくる。しかも毎年。まったく信じてないんだけど、しっかり食べ過ぎてしまって何か悔しかったな。
そんなわが家の餅つきも、餅がいっぱいあっても食べきれないという理由でいつのまにかやらなくなった。おせち料理も作らなくなったし。スーパーは元旦から営業するようになったし。「静かで退屈なお正月三が日」がなくなったのも、その頃だった気がする。
で、現在に戻って熱いふけたばかりのもち米が臼に投入されて、それを待ち構える私。最初は体を使ってもち米を潰す。そうそう。この感じ。最初にもち米を潰すのが大変なんだよね。思わず「この最初に米を潰すのが大変なんですよね」と口をついて出る。軽く息を切らしながら、杵を小刻みに動かす。うん大変だ。餅つきって結構つらい作業なんだよね。楽しいことは楽しいけど。そうそう。一度父親の都合か何かで正月に帰省できなかったことがあって、そんなときでも祖父から伸し餅と大福が送られてきた。「ええ?じいちゃんだけで搗いたの?すごいね」。父が「ほら。この辺もち米が粒のままや。途中でダウンしたんやろ」。じいちゃん無理したなあ、と二人で笑ったこともあった。
向こうで子供が餅を丸めながら、どうすればいいの?と妻に聞いて、妻が大福の作り方を教えてる。餅を搗く動作に気合が入る。
そしてふと思う。あ。おれ「お父さん」になってるわ。いや、餅搗かなくっても父は父なんだけどさ。子供にとって特別な存在って意味で。そんな感慨がした餅つきでした。
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2009年1月4日 20時59分
今日の料理(カマスの干物、ひよこ豆の蜜煮)
スーパーに行ってみたら、魚コーナーはすっかり正月モード。数の子とか酢ダコとか、おせち料理系のネタが幅を利かせていました。私好みの未処理の魚は隅に追いやられていて何だかつまらん。カワハギも最近見かけないし。旬のハズなのにな。君はいずこへ。食べたいと思う魚は入荷されない。そんな宇宙の法則でもあるのかしらん。
鯵とかサンマすらなかったので、カマスを買って帰りました。中型3匹で399円。まあいつもの青魚(鯵・サンマ・いわし・サバ)に比べれば高いけど、別に目が飛び出るほどでもないし。金目鯛のアラにもかなり惹かれたんですけどね。あの大きくて深い目。煮付けたらどんな味がするんだろう。美味そうというより興味本位ですか。でもアラの分際で480円もしたので諦めました。
というわけでこのカマスは干物にしてやろう。帰ってエイヤと背開き。あ、ウロコ取るの忘れた。まあいいや。もう一匹もウロコを取らずに背開き。なんだか腹が柔らかい。鮮度がちょっと疑問。でも干物だから全然問題なし。でもでもちょっと生臭い気がする。いや、新鮮な鯵やサンマだってそれなりににおうんですが、そっちは新鮮な血の生臭さ。カマスは元は上品な香りだったんじゃないかと往時をしのばせる生臭さ。このにおいは酒と塩に二時間ほど漬ける間も消えることはなく、大丈夫かね、と思いながら干物ネットに格納。寒空の夜、ベランダに吊るしました。
で、翌日。朝日を浴びている干物を引き上げてみると、これがいい香りがするんですね。生臭さは奥にやられて一夜干しの甘いいいにおい。身も金色がかった透明になっていて、見かけも美味そう。ほほう。これは楽しみ。(ラップかけて冷蔵庫に仕舞ったところ)
それから昨夜から一晩熱湯に浸しておいたひよこ豆を甘く煮付けてみました。結果はまあまあかな。
砂糖はかなり大量。キビ砂糖ですが、煮詰めていくと茶色の蜜のようになりました。豆はやや固めに仕上がりました。水だけで茹でたときのぽくぽくした食感はなく、まあ失敗した黒豆の煮物みたいな感じですな。でもひよこ豆をたっぷりの砂糖で煮たわけで、不味いわけはなし。味は上等です。
最近は豆とか白身魚とか、体に負担がかからない系を志向してます。やはり体の求めるものに敏感になって意志をコントロールしなければ、体調は上がりませんな。
以上。
(12/30追記)
やはりカマスは美味かったです。旨味のある上品な塩味で、隠し香程度のほのかな海の匂いが口の奥に立ち込めます。上品なんだけど、小さな肉片にも味はしっかり付いている。いやあ青魚とは違うわ。子供も「これは好き」と言っていました。
他にはポテトサラダ(酢を多めに入れたら見事不評。自分的にはまあまあだったんだけど)、それから昆布と魚粉パックで出汁を取り、厚揚げ、みず菜、まいたけを煮て、薄口しょうゆとみりんで仕上げた煮物。かなり好評。ほとんど何も考えずに"冷蔵庫にあるもん"で作る手抜き料理なんだけどな。何か食材に手をかければかけるほど評判が悪くなっているような気がしてならん。悔しい。
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2008年12月30日 8時40分
今さらながら入力補完JavaScript(8)
【段取り】
(4)テキストボックスに入力された文字列にマッチする補完候補をリスト表示する。
【詳細】
今は変数に入った値全部を表示していますが、これを入力された文字列にマッチするものだけ表示するようにします。
今まで便宜的にfocusで候補リストを表示していましたが、ここを全て書き換えて(うわああぁぁぁ!)、キーボードから文字列が入力されたタイミングで候補リストを出力するように変更します。
【結論】
ダメですね。onkeypressイベントでテキストボックスの値を見ても、最後に入力された文字列が入らない。
かなり直感に反する動きになっています。文字を入力した後、右矢印キーなど無害なキーを押さないと、入力した文字を使ってくれません。
余裕があったらキーイベントに依存するのではなく、suggest.jsみたいにtimerで定期的に検索する形に変えてみたいと思います。
ソースを見ていただければバレバレですが、もう付け刃に付け刃してって感じで大変でした。やっぱりJavaScriptはツラい・・・
ディレクトリ構造は変更なしです。
WebContent
- js/prototype.js
- js/my.js
- a.html
- my.css
■my.js
// 外出しです。
var div1 = null;
var cursor_pos = -1;
var element_len = 0;
Event.observe(window, 'load', function(event) {
// イベントを登録します。
var keyevent = 'keydown';
if (window.opera || (navigator.userAgent.indexOf('Gecko') <= 0
&& navigator.userAgent.indexOf('KHTML') == -1)) {
keyevent = 'keypress';
}
Event.observe($('hoge'), keyevent, function(event) {
if (event.keyCode == Event.KEY_DOWN) {
if (element_len < cursor_pos) {
cursor_pos++;
}
var hogeTmp = $('div1'+cursor_pos);
initiateListColors();
hogeTmp.style.backgroundColor = '#00FF00';
} else /* elseをつけましたよ */
if (event.keyCode == Event.KEY_UP) {
if (cursor_pos > 0) {
cursor_pos--;
}
var hogeTmp = $('div1'+cursor_pos);
initiateListColors();
hogeTmp.style.backgroundColor = '#00FF00';
} else
if (event.keyCode == Event.KEY_TAB
|| event.keyCode == Event.KEY_RETURN) {
if (cursor_pos >= 0) {
var hogeTmp = $('div1'+cursor_pos);
$('hoge').value = hogeTmp.innerHTML;
}
$('candidate').style.visibility = "hidden";
} else {
// クリアします
$('candidate').innerHTML = "";
$('candidate').style.visibility = "visible";
cursor_pos = -1;
var i;
var size = -1; // <- 当たり前ですが重要です。
var rObj = new RegExp($('hoge').value);
for (i = 0; i < week.length; i++) {
// 入力された文字が一致していた候補を表示します。
var tmpSearch = week[i];
if (tmpSearch.match(rObj) != null) {
size++; // <- iではなくてsizeをincreしながら使います
// 文字列がマッチしていたらappendします。
var tmpId = 'div1'+size;
div1 = new Element('div', {'id' : tmpId });
div1.innerHTML = week[i];
div1.style.backgroundColor = "#FF0000";
div1.style.width = "100px";
$('candidate').appendChild(div1);
Event.observe(tmpId, 'mouseover', function(event) {
this.style.backgroundColor = "#00FF00";
});
Event.observe(tmpId, 'mouseout', function(event) {
this.style.backgroundColor = "#FF0000";
});
Event.observe(tmpId, 'mousedown', function(event) {
$('hoge').value = this.innerHTML;
$('candidate').style.visibility = "hidden";
});
}
}
element_len = size;
}
});
// onBlur イベントを登録します。
Event.observe('hoge', 'blur', function(event) {
if (div1) {
// div1がnullでない場合はhiddenにします。
$('candidate').style.visibility = "hidden";
// ポジションを初期化します。
cursor_pos = -1;
}
});
});
function initiateListColors() {
var tmpElems = $('candidate').childElements();
for (var j = 0; j < tmpElems.length; j++) {
tmpElems[j].style.backgroundColor = "#FF0000";
}
}
■a.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<script type="text/css" src="my.css"></script>
<!-- 変数をmy.jsより先に読み込む必要があります。 -->
<script type="text/javascript">
var week = new Array("hokkaido","aomori","akita",
"yamagata","miyagi","niigata","fukushima",
"ikkei", "komori", "higata");
</script>
<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/my.js"></script>
<title>Ajax tutorial - a</title>
</head>
<body>
<input type="text" id="hoge" name="hoge" />
<div id="candidate"></div>
</body>
</html>
■my.css
@CHARSET "UTF-8";
/* CSSは表示と関係ありません */
#div1 {
visibility:hidden;
}
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2008年12月27日 12時56分
今さらながら入力補完JavaScript(7)
【段取り】
(3)補完候補の選択確認
【詳細】
生成したDIV要素をキーボード/マウスで選択できるようにします。
次に選択された文字列をテキストボックスに入れ込みます。
TAB、ENTERが押された場合、その時に選択されていた値をテキストボックスに入力し、リストを消去します。すんなり行きました(なんだか動きに違和感があるような気もしますが気にしないことにします)。
ディレクトリ構造は変更なしです。
WebContent
- js/prototype.js
- js/my.js
- a.html
- my.css
■my.js
// 外出しです。
var div1 = null;
var cursor_pos = -1;
var element_len = 0;
Event.observe(window, 'load', function(event) {
// イベントを登録します。
var keyevent = 'keydown';
if (window.opera || (navigator.userAgent.indexOf('Gecko') >= 0
&& navigator.userAgent.indexOf('KHTML') == -1)) {
keyevent = 'keypress';
}
Event.observe($('hoge'), keyevent, function(event) {
if(div1) {
if (event.keyCode == Event.KEY_DOWN) {
if ((element_len - 1) > cursor_pos) {
cursor_pos++;
}
var hogeTmp = $('div1'+cursor_pos);
initiateListColors();
hogeTmp.style.backgroundColor = '#00FF00';
}
if (event.keyCode == Event.KEY_UP) {
if (cursor_pos > 0) {
cursor_pos--;
}
var hogeTmp = $('div1'+cursor_pos);
initiateListColors();
hogeTmp.style.backgroundColor = '#00FF00';
}
if (event.keyCode == Event.KEY_TAB
|| event.keyCode == Event.KEY_RETURN) {
var hogeTmp = $('div1'+cursor_pos);
$('hoge').value = hogeTmp.innerHTML;
$('candidate').style.visibility = "hidden";
}
}
});
// onFocus イベントを登録します。
Event.observe($('hoge'), 'focus', function(event) {
if (div1) {
// div1*がnullでなければcandidateをvisibleにします。
$('candidate').style.visibility = "visible";
} else {
// nullの場合はエレメントを作成して<div id="candidate"></div>に
// appendします。
var i;
for (i = 0; i < week.length; i++) {
var tmpId = 'div1'+i;
div1 = new Element('div', {'id' : tmpId });
div1.innerHTML = week[i];
div1.style.backgroundColor = "#FF0000";
div1.style.width = "100px";
$('candidate').appendChild(div1);
Event.observe(tmpId, 'mouseover', function(event) {
this.style.backgroundColor = "#00FF00";
});
Event.observe(tmpId, 'mouseout', function(event) {
this.style.backgroundColor = "#FF0000";
});
Event.observe(tmpId, 'mousedown', function(event) {
$('hoge').value = this.innerHTML;
$('candidate').style.visibility = "hidden";
});
}
element_len = i;
}
});
// onBlur イベントを登録します。
Event.observe('hoge', 'blur', function(event) {
if (div1) {
// div1がnullでない場合はhiddenにします。
$('candidate').style.visibility = "hidden";
// ポジションを初期化します。
cursor_pos = -1;
}
});
});
function initiateListColors() {
// .style.backgroundColor = "#FF0000";
for (k = 0; k < element_len; k++) {
$('div1'+k).style.backgroundColor = "#FF0000";
}
}
■a.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<script type="text/css" src="my.css"></script>
<!-- 変数をmy.jsより先に読み込む必要があります。 -->
<script type="text/javascript">
var week = new Array("日","月","火","水","木","金","土");
</script>
<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/my.js"></script>
<title>Ajax tutorial - a</title>
</head>
<body>
<input type="text" id="hoge" name="hoge" />
<div id="candidate" />
</body>
</html>
■my.css
<pre>@CHARSET "UTF-8";
/* CSSは表示と関係ありません */
#div1 {
visibility:hidden;
}
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2008年12月27日 12時56分
今さらながら入力補完JavaScript(6)
【段取り】
(3)補完候補の選択確認
【詳細】
生成したDIV要素をキーボード/マウスで選択できるようにします。
次に選択された文字列をテキストボックスに入れ込みます。
次はキーボードです。結構苦労しました。
ポイントは以下の通りです。
1)キーボードイベントは仕様として決まっていないようで、suggest.js を参考に以下のような条件分けをしています。
var keyevent = 'keydown';
if (window.opera || (navigator.userAgent.indexOf('Gecko') >= 0
&& navigator.userAgent.indexOf('KHTML') == -1)) {
keyevent = 'keypress';
}
Event.observe($('hoge'), keyevent, function(event) {
他は行き当たりばったりの力ずくな実装になっています。なりふり構わずなところを暖かく見守って頂きたい。
ディレクトリ構造は変更なしです。
WebContent
- js/prototype.js
- js/my.js
- a.html
- my.css
■my.js
// 外出しです。
var div1 = null;
var cursor_pos = -1;
var element_len = 0;
Event.observe(window, 'load', function(event) {
// イベントを登録します。
var keyevent = 'keydown';
if (window.opera || (navigator.userAgent.indexOf('Gecko') >= 0
&& navigator.userAgent.indexOf('KHTML') == -1)) {
keyevent = 'keypress';
}
Event.observe($('hoge'), keyevent, function(event) {
if(div1) {
if (event.keyCode == Event.KEY_DOWN) {
if ((element_len - 1) > cursor_pos) {
cursor_pos++;
}
var hogeTmp = $('div1'+cursor_pos);
initiateListColors();
hogeTmp.style.backgroundColor = '#00FF00';
}
if (event.keyCode == Event.KEY_UP) {
if (cursor_pos > 0) {
cursor_pos--;
}
var hogeTmp = $('div1'+cursor_pos);
initiateListColors();
hogeTmp.style.backgroundColor = '#00FF00';
}
}
});
// onFocus イベントを登録します。
Event.observe($('hoge'), 'focus', function(event) {
if (div1) {
// div1*がnullでなければcandidateをvisibleにします。
$('candidate').style.visibility = "visible";
} else {
// nullの場合はエレメントを作成して<div id="candidate"></div>に
// appendします。
var i;
for (i = 0; i < week.length; i++) {
var tmpId = 'div1'+i;
div1 = new Element('div', {'id' : tmpId });
div1.innerHTML = week[i];
div1.style.backgroundColor = "#FF0000";
div1.style.width = "100px";
$('candidate').appendChild(div1);
Event.observe(tmpId, 'mouseover', function(event) {
this.style.backgroundColor = "#00FF00";
});
Event.observe(tmpId, 'mouseout', function(event) {
this.style.backgroundColor = "#FF0000";
});
Event.observe(tmpId, 'mousedown', function(event) {
$('hoge').value = this.innerHTML;
$('candidate').style.visibility = "hidden";
});
}
element_len = i;
}
});
// onBlur イベントを登録します。
Event.observe('hoge', 'blur', function(event) {
if (div1) {
// div1がnullでない場合はhiddenにします。
$('candidate').style.visibility = "hidden";
// ポジションを初期化します。
cursor_pos = -1;
}
});
});
function initiateListColors() {
// .style.backgroundColor = "#FF0000";
for (k = 0; k < element_len; k++) {
$('div1'+k).style.backgroundColor = "#FF0000";
}
}
■a.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<script type="text/css" src="my.css"></script>
<!-- 変数をmy.jsより先に読み込む必要があります。 -->
<script type="text/javascript">
var week = new Array("日","月","火","水","木","金","土");
</script>
<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/my.js"></script>
<title>Ajax tutorial - a</title>
</head>
<body>
<input type="text" id="hoge" name="hoge" />
<div id="candidate" />
</body>
</html>
■my.css
@CHARSET "UTF-8";
/* CSSは表示と関係ありません */
#div1 {
visibility:hidden;
}
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2008年12月27日 17時7分
今さらながら入力補完JavaScript(5)
【段取り】
(3)補完候補の選択確認
【詳細】
生成したDIV要素をキーボード/マウスで選択できるようにします。
次に選択された文字列をテキストボックスに入れ込みます。
mousedownイベントを定義します(思ったより順調ですよ)。
※mousedown -> mouseup -> click という順にイベントが走ります。
mousedownの時点でonblurが走ってしまうため、DIV要素が消えてしまいます。
従ってclickイベントでは動きません。
ディレクトリ構造は変更なしです。
WebContent
- js/prototype.js
- js/my.js
- a.html
- my.css
■my.js
// 外出しです。
var div1 = null;
Event.observe(window, 'load', function(event) {
// onFocus イベントを登録します。
Event.observe('hoge', 'focus', function(event) {
if (div1) {
// div1*がnullでなければcandidateをvisibleにします。
$('candidate').style.visibility = "visible";
} else {
// nullの場合はエレメントを作成して<div id="candidate"></div>に
// appendします。
for (i = 0; i < week.length; i++) {
var tmpId = 'div1'+i;
div1 = new Element('div', {'id' : tmpId });
div1.innerHTML = week[i];
div1.style.backgroundColor = "#FF0000";
div1.style.width = "100px";
$('candidate').appendChild(div1);
Event.observe(tmpId, 'mouseover', function(event) {
this.style.backgroundColor = "#00FF00";
});
Event.observe(tmpId, 'mouseout', function(event) {
this.style.backgroundColor = "#FF0000";
});
Event.observe(tmpId, 'mousedown', function(event) {
$('hoge').value = this.innerHTML;
$('candidate').style.visibility = "hidden";
});
}
}
});
// onBlur イベントを登録します。
Event.observe('hoge', 'blur', function(event) {
if (div1) {
// div1がnullでない場合はhiddenにします。
$('candidate').style.visibility = "hidden";
}
});
});
■a.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<script type="text/css" src="my.css"></script>
<!-- 変数をmy.jsより先に読み込む必要があります。 -->
<script type="text/javascript">
var week = new Array("日","月","火","水","木","金","土");
</script>
<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/my.js"></script>
<title>Ajax tutorial - a</title>
</head>
<body>
<input type="text" id="hoge" name="hoge" />
<div id="candidate" />
</body>
</html>
■my.css
@CHARSET "UTF-8";
/* CSSは表示と関係ありません */
#div1 {
visibility:hidden;
}
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2008年12月27日 12時50分
今さらながら入力補完JavaScript(4)
【段取り】
(3)補完候補の選択確認
【詳細】
生成したDIV要素をキーボード/マウスで選択できるようにします。
まずはマウスでハイライトさせます。mouseoverとmouseoutイベントを定義します。
ディレクトリ構造は変更なしです。
WebContent
- js/prototype.js
- js/my.js
- a.html
- my.css
■my.js
// 外出しです。
var div1 = null;
Event.observe(window, 'load', function(event) {
// onFocus イベントを登録します。
Event.observe('hoge', 'focus', function(event) {
if (div1) {
// div1*がnullでなければcandidateをvisibleにします。
$('candidate').style.visibility = "visible";
} else {
// nullの場合はエレメントを作成して<div id="candidate"></div>に
// appendします。
for (i = 0; i < week.length; i++) {
var tmpId = 'div1'+i;
div1 = new Element('div', {'id' : tmpId });
div1.innerHTML = week[i];
div1.style.backgroundColor = "#FF0000";
div1.style.width = "100px";
$('candidate').appendChild(div1);
Event.observe(tmpId, 'mouseover', function(event) {
this.style.backgroundColor = "#00FF00";
});
Event.observe(tmpId, 'mouseout', function(event) {
this.style.backgroundColor = "#FF0000";
});
}
}
});
// onBlur イベントを登録します。
Event.observe('hoge', 'blur', function(event) {
if (div1) {
// div1がnullでない場合はhiddenにします。
$('candidate').style.visibility = "hidden";
}
});
});
■a.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<script type="text/css" src="my.css"></script>
<!-- 変数をmy.jsより先に読み込む必要があります。 -->
<script type="text/javascript">
var week = new Array("日","月","火","水","木","金","土");
</script>
<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/my.js"></script>
<title>Ajax tutorial - a</title>
</head>
<body>
<input type="text" id="hoge" name="hoge" />
<div id="candidate" />
</body>
</html>
■my.css
@CHARSET "UTF-8";
/* CSSは表示と関係ありません */
#div1 {
visibility:hidden;
}
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2008年12月27日 12時50分
今さらながら入力補完JavaScript(3)
【段取り】
(2)手作りリストボックスの確認
【詳細】
(2)手作りリストボックスの確認
DIV要素を配列から生成します。意外と簡単にできました。
ディレクトリ構造は変更なしです。
WebContent
- js/prototype.js
- js/my.js
- a.html
- my.css
■my.js
// 外出しです。
var div1 = null;
Event.observe(window, 'load', function(event) {
// onFocus イベントを登録します。
Event.observe('hoge', 'focus', function(event) {
if (div1) {
// div1がnullでなければvisibleにします。
$('candidate').style.visibility = "visible";
} else {
// nullの場合はエレメントを作成して<div id="candidate"></div>に
// appendします。
for (i = 0; i < week.length; i++) {
div1 = new Element('div', {'id' : 'div1'+i });
div1.innerHTML = week[i];
div1.style.backgroundColor = "#FF0000";
div1.style.width = "100px";
$('candidate').appendChild(div1);
}
}
});
// onBlur イベントを登録します。
Event.observe('hoge', 'blur', function(event) {
if (div1) {
// div1がnullでない場合はhiddenにします。
$('candidate').style.visibility = "hidden";
}
});
});
■a.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<script type="text/css" src="my.css"></script>
<!-- 変数をmy.jsより先に読み込む必要があります。 -->
<script type="text/javascript">
var week = new Array("日","月","火","水","木","金","土");
</script>
<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/my.js"></script>
<title>Ajax tutorial - a</title>
</head>
<body>
<input type="text" id="hoge" name="hoge" />
<div id="candidate" />
</body>
</html>
■my.css
@CHARSET "UTF-8";
/* CSSは表示と関係ありません */
#div1 {
visibility:hidden;
}
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2008年12月27日 12時49分
今さらながら入力補完JavaScript(2)
【段取り】
(1)イベントハンドリングの確認
まだ続きます。
【詳細】
(1)イベントハンドリングの確認
テキストボックスにフォーカスが当たったらDIV要素を表示、blurしたらDIV要素を消します。
DIV要素を動的に作ります。
【恥ずかしながらハマった点】
input要素にappendChildしても表示されない(分かってみれば当たり前)のでハマりました。
ディレクトリ構造は変更なしです。
WebContent
- js/prototype.js
- js/my.js
- a.html
- my.css
■my.js
// 外出しです。
var div1 = null;
Event.observe(window, 'load', function(event) {
// onFocus イベントを登録します。
Event.observe('hoge', 'focus', function(event) {
if (div1) {
// div1がnullでなければvisibleにします。
div1.style.visibility = "visible";
} else {
// nullの場合はエレメントを作成して<div id="candidate"></div>に
// appendします。
div1 = new Element('div', {'id' : 'div1' });
div1.innerHTML = "HOGE!";
div1.style.backgroundColor = "#FF0000";
div1.style.width = "100px";
$('candidate').appendChild(div1);
}
});
// onBlur イベントを登録します。
Event.observe('hoge', 'blur', function(event) {
if (div1) {
// div1がnullでない場合はhiddenにします。
div1.style.visibility = "hidden";
}
});
});
■my.css
@CHARSET "UTF-8";
/* CSSは表示と関係ありません */
#div1 {
visibility:hidden;
}
■a.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/my.js"></script>
<script type="text/css" src="my.css"></script>
<script type="text/javascript">
</script>
<title>Ajax tutorial - a</title>
</head>
<body>
<input type="text" id="hoge" name="hoge" />
<div id="candidate" />
</body>
</html>
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2008年12月27日 12時49分
今さらながら入力補完JavaScript(1)
使い勝手のいいライブラリも出ている(suggest.js)以上、今さら入力補完JavaScriptを作ってみてもしょうがないといえばしょうがないのですが、自前で実装できないというのはやはり悔しいので、勉強がてら作ってみます。
てゆーか本当に難しいですよ。JavaScriptってやつは。
【最終形】
prototype.js(v1.6)を使います。
配列の変数に、補完候補を持ちます。。
インプットボックスに入力された文字列とマッチする補完候補があったら、それをリストボックスとして表示します。
そのリストボックスはキーボードの上/下ボタンで選択、TABあるいはENTERキーで決定できます。マウスで選択もできます。
【段取り】
(1)イベントハンドリングの確認
(2)手作りリストボックスの確認
テキストエリアに文字が入力されると、配列の変数にある補完候補をリスト表示する。
(3)補完候補の選択確認
リストされた保管候補を、キーボード、マウスで選択できる。
(4)最終形
テキストエリアに入力された文字列にマッチする補完候補をリスト表示する。
さて、上手くいくかどうか。
【詳細】
(1)イベントハンドリングの確認
テキストボックスにフォーカスが当たったらDIV要素を表示、blurしたらDIV要素を消します。
ディレクトリ構造は以下の通りです。
WebContent
- js/prototype.js
- js/my.js
- a.html
- my.css
■my.js
Event.observe(window, 'load', function(event) {
Event.observe('hoge', 'focus', function(event) {
$('div1').style.visibility = "visible"
});
Event.observe('hoge', 'blur', function(event) {
$('div1').style.visibility = "hidden"
});
});
■my.css
@CHARSET "UTF-8";
#div1 {
visibility:hidden;
}
■a.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/my.js"></script>
<script type="text/javascript">
</script>
<title>Ajax tutorial - a</title>
</head>
<body>
<input type="text" id="hoge" name="hoge" />
<div id="div1">test</div>
</body>
</html>
どうなることやら不安がいっぱいです。
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2008年12月27日 12時48分
高度成長期のいわゆる中産階級に生まれた
クリスマス(今日はイブ・イブだけど)というのは、私にとっては高度成長期(団塊Jr)のいわゆる中産階級(中企業サラリーマン)に生まれたことを実感するイベントです。
どういうことかと言えば、今日はクリスマスだ。ワー。じゃあ、ハンバーグにしましょうか。やったー!夕方何気にテレビをつけるとディケンズのクリスマスキャロル(人形劇)をやってる。やったー!さあ、ハンバーグ食った。寝るぞ。プレゼント楽しみ~!という感じですんなり収まってしまう感覚。それが日本高度成長時代の中産階級に生まれた子の発想だと思うのです。
すなわち、クリスマスだからいつもとは違う感が欲しい。でもだからといってローストビーフとか、丸一匹のローストチキンというのもなんだか場違いな気がする。いや、別に親にねだればそのくらい作ってくれるのは分かってるし、ハンバーグが凄く特別なわけじゃない(てゆーか先週もハンバーグ食べた)。でも親もいそがしそうだし、ローストビーフが格別ハンバーグより美味いとも思えない。プレゼントももらえる。ハンバーグでかなり満足。別に苦労して背伸びする必要はないじゃん。やれば出来るけどさ(アンニュイ)。という感じ。
クリスマスというイベントを真剣に楽しもうとカロリーを消費し、熱く頑張る人と比較した時、若干「損?」という気もしないではありませんが、トータルで見れば妥当というか、バランスが取れている態度にも思えるわけで。家にはお手伝いさんがいました。クリスマスといえばローストチキンが当たり前。というお坊ちゃんお嬢ちゃん。あるいは、昔貧乏したことがあってなんとなくコンプレックスがあるんだよねー、だからクリスマスからローストビーフははずせない。という価値観よりも、まあ、それなりに楽しもうや、というところが自然体でよろしいのではないか、と。
そんなふうに自己肯定できるだけ、成長したなと自分を褒めてやろうじゃないか。自分を「よし」としたいと思う、今日この頃です。
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2008年12月23日 23時53分
吉行淳之介「飲む」
吉行淳之介の「飲む」というエッセーがあって、これがエッセーの白眉というか、何年かおきに読み返してしまうのです。
個人的には傑作と思ってます。一杯の酒がもたらす潤い。
琥珀色の美酒。ストイックでありつつも、酒を楽しむことのできる余裕。酒への憧れとストイックさとの共存。一杯の貴重な酒を飲むことで、生きている文脈に戻る。生きている実感と、酒を飲む幸せとが完全に合体する時。
いいですね。うん。
以上。
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2008年12月23日 23時29分
クリスマスの危機
まあ、今日はクリスマス・イブ・イブなわけですが。
だいたい子供というのは、こういうイベントがある日には朝からハイになり、日中は尋常じゃないテンションで騒ぎまくるわけです。
そして両親はせっかくだから、とケーキを作ってみたり、ご馳走を作ってみたりして神経を使いつつ、日中は労働しているわけで。
ということは、次第に子供はわけも分からず騒ぎ立て、父母は労働による疲れがかさみつつ、ハイテンションを引きずりつつ疲れも見えてきた子供たちに振り回されることで、次第に不機嫌になるわけで。
で、クライマックス。ケーキとかハレのデザートを準備し、ハレのご馳走を準備しつつあるそのとき、事故は起こるものなのです。
まあ、さすがになれましたけどね。皿やグラスが割れなければもう上出来というか。怪我しなけりゃあそれでいいか、みたいな。
今年は妻がクッキーで作るお菓子の家なるギミックを採用し、苦労して作ってました。及ばずながら私も皿洗いなど手伝いましたけど。それからローストチキン丸一羽分。これも妻が選択し、妻が頑張って作りました。美味かったです。一家四人おなか一杯食べた後、残った残骸から出来るだけ肉をこそげ取り、さらに残ったガラを鶏がらスープに。チェ・ゲバラ率いるゲリラのメンバーに食べさせてあげたいと思った。マジで。でも血はにごった感じ。昼食抜いたのにな。また断食しなければ・・・
という訳で、誰も怪我せず、皿が割れることもなく、楽しく過ごしました。うんうん。
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2008年12月29日 10時57分
Ajaxとか
Ajax入門。いいページですね。Ajaxがよく分かる。
これまでJavascriptでコーディングする人は神だと思っていましたが、この入門を一通りチェックして少し神が身近に感じられました。そうか。FireBugを使えばいいのか(それにしても大変だと思うけどなあ)。
それからSOAだとかweb serviceという(胡散臭い)ジャーゴンがここ数年生きながらえている理由も、少し理解できたような気がしました。上手く言えませんが、要するにショッピングサイトの構築には相性がいいんだなってとこでしょうか。まだまだEnterpriseの領域でSOAとかweb serviceが活用できるとは思えないんだけどな。だって必要性がありませんぜ。データベースを使えばいいんだからさ。
以上です。
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2008年12月21日 21時40分
今日の料理(タラコディップ・サンマのみりん干し)
カラスミを目指していたタラコの塩漬け。ハエにファーストキッスを奪われた悔しさのあまり、火あぶりにして食べてみたらちゃんと美味しいタラコでした。魚卵好きのうちの妻は喜んでました。当然アミノ酸やら蛋白加水分解物は入っていないので分かりやすい旨味はありません。でもタラコ好きならイケるんじゃないかな。無添加だし。ちゃんとしたタラコっぽい発酵臭としょっぱいツブツブ・プチプチのテクスチャ。それに遠くの方から漂ってくるほのかな旨味。うん。タラコだ。って感じです。戦前のタラコってこうじゃなかったのかな。食べたことないけど。
今日はそんなタラコを使ってマヨネーズディップを作り、蒸し野菜と食べました。美味かった。私が料理するとたんぱく質と脂が過剰になるので、野菜を意識的に摂取する必要があります。一部はマヨネーズと和えずに、妻がご飯と食べてました。
それから昨日作ったサンマのみりん干し。これが美味かった。鯵で作ったときはちょっと干し過ぎてしまい、焼いたら硬かったんですが、今回やや生干しっぽくしてみたらご飯に合う合う。今度鯵のみりん干しを作るときは干し加減に気をつけようと心に誓いました。
なんだか血が濁ってきた気がするのでしばらく野菜優先で行きたいと思ってます。(でも鳥ハム仕込んじゃってるんだよな・・・)
以上。
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2008年12月21日 21時33分
カラスミとか
生のタラコをカラスミにする計画ですが、本日のハエの挨拶ですっかりなえてしまいました。
一週間塩漬け → 丸一日水で塩抜き → 丸一日酒に漬ける → 冷凍庫で丸一日冷凍(一応アニサキス対応) → 冷蔵庫で乾燥 とかやってるうちに食い物に見えなくなったのよ。これ食うの?って。扱いが食品じゃなくなってて、何かの実験?みたいな。たとえるなら人体実験?
でも、途中でちょっとはみ出した卵を食べると美味しいんですけどね。マイルドで自然なタラコって感じで。でも、今日外に干してみたタラコに、いとおしそうにベタベタとキスしていたハエを観察してもう生食は断念。もう炙って食っちゃる。生食勘弁。パンとか乾き物なら多少ハエがとまっても気になりませんが、自作のカラスミにとまったハエは結構インパクトでした。大体個人でカラスミ作っていいのかと。ちゃんとお国の監査を経た、歴史ある企業がするべき仕事ではないのか、と。まあ、ようするにヘタレってことで。私は逃げますよ。明日か明後日に、しっかり炙っていただくことにします。
それからサンマのみりん干しと、鳥ハムを仕込んでます。
サンマはアジよりさばくのが楽ですね。頭を落としてしまえば背開きも結構簡単。ざくざくと出刃包丁で小骨を切る感触が楽しかったです。それからとうとう上州屋で干し網を買いました。ハエを寄せ付けないような干物を干す網です。物干し竿に引っ掛けます。700円台でした。元は取れると思うな。ふっふっふ。
以上。
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2008年12月21日 21時42分
再びチェ・ゲバラ
引き続きボリビア日誌を読んでいます。
人心掌握の難しさよ。チェほどの人間でも苦労するんだ。
希望を維持することができる。それだけで偉大だと思う。
ゲリラ戦すら楽しむ。ある人の生きる文脈が、他人を巻き込むことが出来る。
チェ・ゲバラの目標の気高さ。そして、それに恥じない彼の生き方。
結構心を打たれます。
.
作者:akagi takashihttp://www.blogger.com/profile/11703287693649141247noreply@blogger.com
更新日:2008年12月20日 22時9分