TextBoxWatermark
Atlas.NET覗いていたら、テキストボックスに入力してもらいたい内容を表示しておき、フォーカスがあたると消すというデモンストレーションが載っていた。
http://atlas.asp.net/atlastoolkit/TextBoxWatermark/TextBoxWatermark.aspx
英名で「Watermark」、「すかし」なんていう意味もあるようだ。
これくらいなら実装できるかなと思ってJavaScriptを書いてみた。
ライブラリとしてprototype.jsを使ってます。
TextBoxWatermark = Class.create(); TextBoxWatermark.prototype = { initialize: function(element) { this.element = $(element); this.options = Object.extend({ watermark_text: '', /* すかし文字 */ css_class: 'watermark' /* すかし時のCSSクラス */ }, arguments[1] || {}); //F5更新の場合など、テキストはキャッシュされるのでウォーターマークと同じ場合も処理が必要。 if (this.element.value == '' || this.element.value == this.options.watermark_text) this._convertPlaneToWatermark(); Event.observe(this.element, 'focus', this._handler.bind(this), false); Event.observe(this.element, 'blur', this._handler.bind(this), false); }, _handler: function() { if (this.element.value == '') this._convertPlaneToWatermark(); else this._convertWatermarkToPlane(); }, _convertPlaneToWatermark: function() { var element = this.element; this.prev = element.className; element.className = this.options.css_class; element.value = this.options.watermark_text }, _convertWatermarkToPlane: function() { this.element.className = this.prev; if (this.element.value == this.options.watermark_text) this.element.value = ''; } };
再び、問題を与えられる
Life is beautiful様より、「またまたもう一問、今度はプログラマーになりたい人向きの頭の柔軟体操」とご命令が^^;
前回の汚名をそそがねばっ!!
【問題】ある直線上に線分AとBがあります。線分Aの両端の座標はそれぞれA0とA1(ただしA0
再び算数知識の無さを露呈
えー、線分ってなんすか?イメージできません・・・・
線分
線分とは、有限長さの直線のこと。
なるほど。とすると
/-----A0----A1---B0-----B1--------/
なーんて並んでたりするわけだ。
ここまで解れば後は簡単。
重なる場合はパターンが多いので、まず重ならないパターンを探す。
A1 < B0 || A0 > B1
これの反対が正解!!
not(A1 < B0 || A0 > B1) =
B0 <= A1 && A0 <= B1
エレガントな解法
"Life is beautiful: できるかぎりエレガントな解法を見つけて「うっかりミス」を減らす"より
数学問題は大の苦手。やっぱ着想がよくないのだろうか。
とりあえず一問といてみる
エレガントさと対称例題1.時計の長針と短針は、12時にちょうどピッタリと重なります。 次にピッタリと重なるのは何時でしょう。
どーにもエレガントには考えられない。
まず1時までは交わることがないから一時まですすめる。
長身が60進む間に短針は5すすむので、速度の問題と考えて長針が短針においつくには
n(分) = 5/60n + 5(短針の初期値) となると。
n = 60/11とでるのでー、
答えは1時間60/11分
でもぜんぜんエレガントな解答じゃないよなぁ。
と、ここでエレガントさんはどうしているのかなと模範解答を見ることに(考えなければいけないのに・・・)
解答1.12時間経つ(短針が1周する)うちに、ピッタリと重なるのは11回。全て等間隔で起こる。よって12/11時。
両方の解答に共通しているのは「対称性」である。
例題1では、「重なった状態から次の重なった状態まで」が12時間の間に11個詰まっている。例題2では、「1つ目が大きい」と「2つ目が大きい」の2個が、5/6の確率の中に詰まっている。それぞれが等間隔(同じ大きさ)で存在していることが条件になる。
諸悪の根源は物理的:エレガントさと対称性
なっ、なるほどぉ。
対象性か、たしかに時計が壊れてない限り同じタイミングで長針と短針は交わり続ける。
この前提条件大きいなあ。繰り返しの中にこの最小単位というかループのひと単位を見つけることが重要なんだな。
斉藤由多加さんもおっしゃってることだし、しっかりと頭に留めておこう。
テーブル構造(関連)にビジネスルールを含めるべきか
A.含めるべきではない。
理由:
一度決めたテーブル構造(関連)・データ構造を変更することは非常に難しいから。
なんせ、テーブル構造やカラムなど、DBは「超グローバル変数」の宝庫ですから。
今日の鱗
回転を見つけよう
構造で何かを表現する、というのは、
文字の発想をしていると難解に見えます。
でも一度身に着けてしまうと、
いろいろなものが表現できるようになる。
世の中には、一歩引いてみると
回転や循環しているものがたくさんあります。一番簡単なものは、「すうじ」でしょうか。
0から9までの10の数字で、すべての分量を表現してしまう。
これはすごいことです。
ループする構造にすることで人間は無限を手に入れたのです。
日本の昔の単位だと、「億」とか「兆」とか「京」とか、さらにその上のものまで、
桁が上がるにつれて単位をいちいち命名しなければなりませんでした。
西暦に対する元号もしかり。あるいは、水と雨と地球環境、
山手線のダイア、虫の一生と産卵、など、すべてのものは「回転構造」
「循環構造」として捉えることができます。
ほぼ日刊イトイ新聞 - 斉藤由多加の「頭のなか」
構造として本質を捉える。重要ですなあ。
日常にループ構造となっているものはなにがあるかな。
んー。僕自身がステップアップループをしたいってことでまとめ。