Headline About TechLog Download Java VBA Link

February 24, 2008.

今年の目標(今頃かよ!)


珍しく続いていた日記が、久し振りに途絶えましたね。理由は仕事も辞書アプリも停滞しているので書くことが無いというのが半分、週末遊びすぎたと言うのが半分というところです。

金曜夜、土曜朝、土曜昼とひたすらバドミントンをやりました。とにかく足強化が第1目標。後は前衛力を強化したいなぁ。趣味の中でのバドのプライオリティはベスト3に入るのでもうちょっと頑張りたい。60才迄はパワープレイヤでいたいな。

土曜夜は4人でチーズフォンデュ。リクエストを受けたため手製のティラミスを持参しました。しかし、チーズ尽くしだな...。夜中には雪が大変なことに。

日曜は伊勢まで赤福を買いにいくも、馬鹿混み。お前ら、そんなに赤福が食べたいか!俺もだ!しかし余りの寒さに断念。フレンチのランチを食べて帰る。サイドメニュー、パンが美味しかった。パスタは及第点。絶賛ではなかったなぁ。トマトの方が美味しそうだった。選択ミス。結局、夜もパソコンで遊んでいただけ。仕事のためにでかいモニタを買ったはずなのに...。

 

ずっと購入するスピーカについて悩んでいましたが、漸く方針決定。ウーハ無しの余り高価過ぎない、スタンダードなものにする事に。PCなどを購入する場合、悩んだら高い方・高機能な方を選ぶことにしているのですが、オーディオは素人なので「高機能」の尺度があやしいので。取り合えずはコントロール(「対照」の意味)となるものを購入するのが、今後の人生にプラスかなという選択です。後は机と同じ高さの棚を購入して作業面積を確保したいところ。しかし、めぼしいものが見当たらない。面倒だけど自作すべきかなぁ。

 

PS3やデジタルチューナも欲しいところですが、しばらく我慢。特にPS3はかなり高価だし。取り合えず、今頃になって(ほんと、今頃ですが)今年の目標を定め、それが堅守できるようなら購入しようかなと。期限は特に設けず、自分の身になったと納得できたら、両者を購入する形にしよう。つまり、こういうニンジンをぶら下げておかないと、何も実現できない意志薄弱なbaristaなのです。

 

【今年の目標】

・必ず1日1時間以上、英語の勉強に費やす。

・必ず1日1時間以上、真顔で○○に取り組む。

 

本当はどちらも2時間以上にしたかったところですが、実現の難しい目標を立てて挫折、という愚を冒したくないため、あえて1時間に留めました。両者とも飲み会その他の存在の如何にかかわらず、というルールです。ただ、泊まりのイベントなどもありうるため、不足分を前後の日程でカバーすることを許可する、という逃げ道を作っておきます。変なところで完璧主義で、1回失敗するとやる気が無くなるので、それによる失敗回避策です。両者ともExcelなどで管理し、極力日記にUPするなどして、中だるみを防止したいと思います。なお、上記目標と平行して、このホームページの更新やアプリ開発は続けるつもりです。頑張れよ⇒俺。

あ、あと、

 

・土日に早起きする

 

これも実現したいな。時間を有効利用するために。しかしbaristaの目標って、明らかに小学生レベルですね。

 

 

【Nullの時は条件に入れないSQL】

SQLでSELECT文を書く際は、当然WHEREで条件を絞り込む。例えばこんな感じだ(あ、[parameter]の部分は言語やフレームワークによって違うけど、なんか引数が設定できる部分だと頭の中で保管して置いてください)。

 

SELECT * FROM USER_MSTR WHERE ID = [parameter]

 

画面に条件が入っていない場合、NULLや空文字で検索することとなり、検索結果は0件だ。しかし、「条件を入力しない場合は全件取得したい」という要求の方が多い。そういう場合に、こんなコードを書くプログラマが多い。

 

strSql = "SELECT * FROM USER_MSTR";

if (strParam != NULL && strParam.length() > 0) {

  strSql += " WHERE ID = '" + strParam + "'";

}

 

確かに動く。しかし、これでは実行のたびにSQLが変化するため、DBやフレームワークによる高速化の恩恵が得られない可能性がある。また、JDBCにおけるPreparedStatementのようなパラメタ渡しを利用できないため、かなりちゃんとした入力チェックを実装してやら無いと、B to CサイトなどではSQLインジェクション攻撃に弱くなってしまう。

このような場合、SQLを以下のように書けばSQLをif文で作り変える必要が無い。

 

SELECT * FROM USER_MSTR WHERE ([parameter] IS NULL OR [parameter] = '' OR ID = [parameter])

 

1つのパラメータの中身を書き換えるだけで済むことになるため、PreparedStatementクラスなどを利用することができ、インジェクションを心配せずに済むし、高速化が期待できる。なんでもないことだが結構便利。

なお、SELECT * は例だから書いたのであって、実コーディングでは絶対使ってはいけない。職業プログラマで知らない人はまずいないと思うが...。


名前: 意見: パス:

※パスにはこの日記のタイトルをコピペして下さい。


February, 2008
SUN MON TUS WED TUR FRI SAT
12
3456789
10111213141516
17181920212223
242526272829