MW211 EXIT

devlog
PHP/連想配列のキーを論理型にしてみる
2012年01月20日
「echo TRUE;」は「1」(※)で、「echo FALSE;」は「」(空文字)だったりするわけだが
んじゃ、連想配列のキーにしてみたら…?
┌──────────────────────────────────────┐
│$a[TRUE]  = 'a';                                                            │
│$a[FALSE] = 'b';                                                            │
└──────────────────────────────────────┘
ってのを用意して、
┌──────────────────────────────────────┐
│print_r($a);                                                                │
└──────────────────────────────────────┘
ってやるわけですよ。

結果はこう。
┌──────────────────────────────────────┐
│Array ( [1] => a [0] => b )                                                 │
└──────────────────────────────────────┘

ま、想定通りといえば想定通り、意外といえば意外かも。

直接こんな書き方はしないだろうが、変数とかを介して
意図せずして(?)こういうケース(論理型をキーにしてしまうケース)に出くわすのでは。

※でもね、この「1」は「=== TRUE」では真だが「=== 1」や「=== '1'」では偽だ。
  まぎれもなく、「TRUE」のようだ。これ注意ね。
分類:PHP配列
jQuery/セレクタのAND条件・OR条件
2012年01月19日
セレクタで「prefix_xxxx_suffix」みたいなIDを絞り込む方法はこれ
┌──────────────────────────────────────┐
│$("[id^=predix_][id$=_suffix]")                                             │
└──────────────────────────────────────┘
いわゆるAND条件ってやつだね。

「prefix_xxxx」も「xxxx_suffix」も(もちろん「prefix_xxxx_suffix」も)OKな
OR条件にするには「,」をつかう。
┌──────────────────────────────────────┐
│$("[id^=predix_],[id$=_suffix]")                                            │
└──────────────────────────────────────┘

さらにinputタグのtext属性(いわゆる入力欄)もAND条件でつけるとしたらこんな感じか。
┌──────────────────────────────────────┐
│$(":text[id^=predix_],:text[id$=_suffix]")                                  │
└──────────────────────────────────────┘

「((A && B) || (A && C))」みたいな感じだね。
分類:jQuery
jQuery/いろいろあるよね(2)
2012年01月18日
┌──────────────────────────────────────┐
│(1) $(this).css({backgroundColor:'#FF0000'});                               │
│(2) $(this).attr("style","background-color:#FF0000");                       │
│(3) $(this)[0].style.backgroundColor = "#FF0000"                            │
└──────────────────────────────────────┘
こいつらも全部同じ。

微妙に「backgroundColor」と「background-color」が違うから注意。

う~ん、ややこしや~。

例えば、tableタグで列を一つクリックすると行の色が変わる、みたいな処理でも
こう書くこともできれば
┌──────────────────────────────────────┐
│$("td").click(function() {                                                  │
│  $(this).parent().children().css({backgroundColor:'#FF0000'});             │
│});                                                                         │
└──────────────────────────────────────┘
こう書くこともできる。
┌──────────────────────────────────────┐
│$("td").click(function() {                                                  │
│  $(this).parent().children().attr("style","background-color:#FF0000");     │
│});                                                                         │
└──────────────────────────────────────┘
他にもいろいろあるよね。
分類:jQuery
どっち?/末尾に「。」は必要か
2012年01月17日
設計に限った話ではないが、パソコンで書く文章に句点(「。」)は必要なのだろうか?

日本語としては当然「。」があった方がいいのだろう。
そういう常識から、「。」がないことを画一的に批判する人もいる。

でも、読みやすさとしては、「。」で改行した方が断然見やすい。

ってことは、末尾の「。」って別になくてもいいじゃんと思う。

実際、禁則処理なんか気にせず「。」を改行コード(\n)に置換しちゃえば楽チン。

別に「。」の後に空改行をいれなくても全然違和感はない。

ま、最大の欠点は、一行に二文以上書けないということなんだけどね。

ここだけ、「。」で区切るってのもね(だいたい、「。」は全部置換するつもりだし)。

ってことで、当ブログでは一行に二文以上書きそうなので、
他の文書とは違って「。」を使ってます(ダブルスタンダードは避けては通れない)。
分類:設計、どっち?
JavaScript/周期処理
2012年01月16日
┌──────────────────────────────────────┐
│init() {                                                                    │
│  setInterval(func(), 1000);  // 1秒周期                                    │
│}                                                                           │
├──────────────────────────────────────┤
│function func() {                                                           │
│  処理;                                                                     │
│}                                                                           │
└──────────────────────────────────────┘
                    「setInterval()」↓  ↑「setTimeout()」
┌──────────────────────────────────────┐
│init() {                                                                    │
│  setTimeout(func(), 1000);  // 1秒周期                                     │
│}                                                                           │
├──────────────────────────────────────┤
│function func() {                                                           │
│  処理;                                                                     │
│  setTimeout(func(), 1000);  // 1秒周期                                     │
│}                                                                           │
└──────────────────────────────────────┘

こんな感じで書き分けられる。

前者は何が何でも時間に厳格で、後者は前の処理が終わるのを待ってくれる。
分類:JavaScript
jQuery/いろいろあるよね(1)
2012年01月15日
jQueryってやり方がいろいろあって、知らないと損した気分(不安な気分)。

┌──────────────────────────────────────┐
│(1) $(this).val()                                                           │
│(2) $(this).attr("value")                                                   │
│(3) $(this)[0].value                                                        │
└──────────────────────────────────────┘
これらは全部、同じ。

ちなみに値を代入したい場合にはそれぞれこう。
┌──────────────────────────────────────┐
│(1) $(this).val("値")                                                       │
│(2) $(this).attr("value","値")                                              │
│(3) $(this)[0].value = "値"                                                 │
└──────────────────────────────────────┘

これらの基本を踏まえて他の属性で処理に迷ったら流用すればよい。
(3)はprototype.jsっぽい書き方。
(2)はjQuery的な書き方。
そして(1)は特殊なjQueryに特化した書き方
(属性によっては該当するメソッドがない場合が多い)
ってとこかな。

jQueryにこだわらないのであれば、(3)にしとけばjQueryのない世界へ置換しやすい。
jQueryにどっぷりというのであれば(2)から入って(1)の知識を増やしていくって感じか。

(2)と(3)を把握できれば、立ち往生する機会が減るかも。(後で見直す(改善)のも重要)
分類:jQuery
jQuery/セレクタ徳川家康(2)
2012年01月14日
「$(this).children()」と「$(this).find()」の違い。

前者は子供だけ、後者は子々孫々まで。

家康の場合
「$(this).find("光圀")」はみつかるけど
「$(this).children("光圀")」はみつからない。


「$(this).find("慶喜")」とかまでOKだ。
分類:jQuery
jQuery/セレクタ徳川家康(1)
2012年01月13日
わかる人にわかればよい。
徳川家康が起点です。

家光から義直を捜す場合。

「$(this).parents()」=「秀忠、家康」だから

「$(this).parents("義直")」ではみつからない。

「$(this).parents()」ってのは、直系の先祖を辿ってくれる。

「$(this).parent()」だと、単数系だから親一人だけ(「秀忠」)

「$(this).find()」てのは子々孫々まで全部を網羅する。
#たぶん、引数に条件を指定して絞り込む使い方普通なんだろうけど

ってことは、
「$("家康").find()」=「秀忠、家光、家綱、義直、光友、頼宣、頼房…」だから

「$(this).parents().find("義直")」でみつかる。

律儀者だったら「$(this).parent().parent().find("義直")」かもね。
#いやいや、中途半端な律儀ぶりだけどね
分類:jQuery
設計/パスワード
2012年01月12日
パスワードってのは他人に知られてはいけない。
だから暗号化する。

「A(暗号化前)→B(暗号化後)」を例として話を進めると。

「A」を管理するのは危険だ。
もし管理者が会員全員のパスワードをすべて持っているとしたら
それを覗かれた場合大変なことになるので、かなり神経を使うことになるだろう。

暗号には復号がつきものだ。
でも、パスワードの場合は復号の必要はない。
パスワードが一致すればそれで事足りるのだ。
もし、パスワードを忘れてしまったら?
元のパスワードなんか教えなくたっていい。
再発行すればいいのだ(そして再設定してもらう)
#そもそも忘れるようなパスワードを教えてもらってもまた忘れるかもね

とにかく「A→B」の矢印は「A←B」である必要はない。

ってことで、「→」しか方向がない強力な暗号化機構を用意して
・パスワードは「B」のみを管理して「A」は入力した時だけ使って破棄する
・パスワードの照合(一致)は「→」を使って変換した「B」(?)が
  管理(保持)している「B」と一致するかで判定するようにする
っていうルールにすればよい。

これだと例え「B」が流出しても「→」を使って変換した結果を照合するので
「B→Z」とかになって「B」だけでは役立たずになる。
「?→B」となる「?」がわからなければ意味がない。
そしてそれは「←」がないので事実上無理。
これで、管理者は結構楽になる。

さて「→」にあたる機構、どんなのがあるのか?
ハッシュってのがあって、「md5」とかいろいろ種類がある。
こいつの特徴は「B」が固定した幅の値に収まる。
つまりどんなAであっても、Bは「00~99」になるみたいなもんだ(1でも1000でも)。
ってことは、重複もありうる。
そう、「A」でも「C」でも「→B」となる場合がありうるのだ。
でもこの確率はとっても低いらしい。
(Bの幅が十分に広くて、Aも使えない文字とかもあって入力が限られるから)
そしてなによりも「AorC→B」ってことは、「←」が難しいことが一目瞭然。
(な気がする)
分類:設計
JavaScript/disabledの錯覚
2012年01月11日
「disabled="disabled"」みたいな属性を付加することにより
その項目を入力不可とするとともに、POSTパラメータとして送信しなくできる。
(っていうか送信できないのが結構厄介だったりするけど)

でも、こいつは消滅したわけじゃない。
document.getElementById()とかでもしっかり扱ってくれる。
特にjQueryのeach()とかでもね。

チェックを外した瞬間に動的にdisabledにして、submitにチェックって時に
チェック対象外かなって錯覚するパターンだ。
分類:JavaScript、jQuery
前へ 1 2 3 次へ