Jump to navigation
2006年 8月 16日 (水曜日)
- Work on miau's blog?
なんかわかりにくい。
配列の説明には、
あるキーが、整数の標準的な表現形式である場合、 そのように解釈されます
(つまり、"8" は 8 として解釈されます。一方、 "08" は "08" として解釈されます)
と書いてあって、配列のキーとして "8" と "08" は区別されることがわかる。
一方
比較演算子の説明には、
数値形式の文字列を比較する場合、それは整数として比較されます。
と書いてあって、例によるとつまり "1" == "01" は true になると。
先日このへん混同してて、ちょっぴりハマりました。
もうちょっとわかりやすい仕様にできなかったかなー。後者の仕様って邪魔なだけなような。
2006年 7月 08日 (土曜日)
- Work on miau's blog?
ちょっと前の話。
今やってる案件で、「Web フォームで submit ボタンをダブルクリックしても、2 回 submit されないようにしてください」との要望(実際には不具合呼ばわりされた)がありまして。
先日読んだ
CSSクックブックにもそういうレシピ「5.5 1回限り有効な送信ボタンの設定」があったけど、これは onSubmit 時にボタンに display: none なスタイルを適用する強引な方法。これだとキャンセルボタンとか押されたときにどうしようもなくなるでしょ・・・。
もっとまともな方法がありそうなのでググってみると、やっぱりありました。
onsubmit で disable にするやつ
へー。共通の .js に入れるだけで自動的に使えるようになるわけか。
ということで、お客さんに「1 時間くらいで対応できると思いますよ」と伝えたんだけど、これがまずかった。実際組み込んでみるとちゃんと動作しない。
原因は 2 点。
・<body> で onLoad イベントを指定していた。<script>→<body> の順で記述してたから、イベントが上書きされちゃったみたい。
・submit 動作を行うのが <input type="image"> なボタンだったんだけど、type="image" な要素は form.elements として取得できない。
前者の問題は、とりあえず <body> の onLoad イベントにも DisableSubmit.set(); を追記することで対応。
後者の問題は、this.elements の代わりに document.getElementsByTagName('input') を渡すことで対応、と。
ちなみに、setTimeout(〜, 1) を使っているので通常のダブルクリックには対応できるけど、「クリックと同時に Enter」みたいな意地悪をすると二回 submit されるみたい。まあ、
naoyaのはてなダイアリー - submit ボタン disable 技の罠
の対策だろうし、目的は「ついうっかりダブルクリック」を防ぐことだからこれで十分か。
あと、setTimeout(〜, 1000) だと 1 秒後に復活しちゃうけど onStop で実装したほうがしっかり作れるんじゃ?とか思って調べてみたら onStop って IE 特有のイベントみたいで納得。
(追記)
そういえばもう一点変更してたんでした。
if ((elm.type == 'submit' || elm.type == 'image') && !elm.disabled) {
...
}
・・・でしたっけ?なんかすでに変更していただいているような。
とりあえずこれだと引っかからないものが出てくるので、
if (elm.type.match(/^(submit|image|file|button)$/i)) {
if (!elm.disabled) {
...
}
}
こんな感じに。
正規表現で条件判定するのは Perl 厨の悪い癖かもしれないけど、こっちのほうが楽に拡張できるから好きだったり。
- Work on miau's blog?
今保守してるサイトの要件が IE5.0/NN4.7 以上での閲覧を保証しないといけないとかで、NN4.78 で動作検証してたんですが、JavaScript が動作しないことが判明。
ちょっと手が空いたので原因を調べたところ、今回の問題は 2 点。
(1) フォーム名等を参照する場合、普通 frmHoge とだけ書けばいいところも document.frmHoge として記述する必要がある
(2) input type="image" では onClick イベントが動作しない。A タグ+IMG タグに置き換えて、A タグの onClick で処理してやる必要がある。
NN4.x なんて Web 黎明期のブラウザだから、今検索しても情報少ないから困った。(1) に関しては言及されているサイトも多いけど、(2) に関しては情報が少なすぎ。
input type=image onClick doesn't work in Netscape - Dev Shed
Input Type = "Image" - JavaScript
このあたりに載ってたけど、確かに
Netscape 4 DOM Reference(Internet Archive)によると onClick の説明に
Event handler for
Button, document, Checkbox, Link, Radio, Reset, Submit
とか書いてある。IE の仕様書と厳密に比較したら面白そうだけど、今度サイトのリニューアルで NN4.7 のサポートが必要なる予定だからやらなくていいか。
で、動かない原因を調べたのはいいけど、結局デザインにも関わる部分だとわかったので、今回は変更を保留。会員向けサイト(みたいなもの)だけどクレームが入ってないってことは、NN4.7 使ってる人いないってことでしょ。
2006年 6月 29日 (木曜日)
- Work on miau's blog?
ちょっと思ったこと。
意外と長くなったので分けます。
[Read More!]
2005年 12月 20日 (火曜日)
- Work on miau's blog?
ASP.NET の感想とか不満点とか、そういう所。
[Read More!]
2005年 12月 18日 (日曜日)
- Work on miau's blog?
さらに続き。
今回はまあ色々情報とか?
[Read More!]
2005年 12月 17日 (土曜日)
- Work on miau's blog?
続き。
今回はプロジェクトで目の当たりにした問題点とか。
[Read More!]
2005年 12月 16日 (金曜日)
- Work on miau's blog?
9 月末に ASP.NET を使ってる案件のヘルプに入りまして。
初めは「3 日間限定で」みたいな話だったんですが、なんだかわからないうちにずるずる最近まで手伝ったりしていて、漸くそれが落ち着いたのでそのお話でも。
なんか色々とネタが溜まってるので何回かに分けます。
今回は、
・事のあらまし
・導入
・導入当初に役に立つ Tips
みたいな感じで。
[Read More!]
2005年 11月 08日 (火曜日)
- Work on miau's blog?
最近、ER 図を書くときには Visio を使っています。
Excel とかでも似たようなのは書けるけど、Visio はデータが構造化されてるので、いざというときに処理を自動化できるから。
・・・と思ってたんですが、いざやってみるとこれが大変でした。
今回は大変どころか挫折したんですが、折角なのでメモ。
[Read More!]
2005年 10月 27日 (木曜日)
- Work on miau's blog?
なぜか isql で localhost 上の SQLServer 2000 に接続できないとかありましたので、そのお話。
[Read More!]
2005年 10月 25日 (火曜日)
- Work on miau's blog?
以前のアイテムで、Perl から PHP のセッション情報を読んだりしてましたが。
PHP のセッション情報に保存されたユーザ ID を確認して、ユーザ認証を行うのが目的でした。
ということで、認証が必要な CGI の先頭に、
use CGI qw(:standard);
use PHP::Session;
my $sess_id = cookie('PHPSESSID');
my $session = PHP::Session->new($sess_id);
my $user_id = $session->get('user_id');
こんな感じの処理を仕込んでたんですが・・・この後 cgi-lib.pl みたいな処理で POST データ読もうとしても、読み込めなかったり。
原因調べてみると、CGI::cookie() を呼んだ時点でいろいろ autoload されて、POST データが CGI.pm に横取りされてしまってる模様。
仕方ないから、手動でデータ取得したり。
my $sess_id = '';
my $raw_cookie = $ENV{HTTP_COOKIE} || $ENV{COOKIE};
my @cookies = split /;/, $raw_cookie;
foreach my $cookie (@cookies) {
my ($key, $value) = ($cookie =~ /\s*(\w+)\s*=\s*(.*)\s*/);
if (defined $key && %key eq 'PHPSESSID') {
$sess_id = $value;
}
}
適当に書いたけど、とりあえずちゃんと動作してる様子。
ちゃんと処理全体で CGI.pm 使うようになってれば問題ないんだろうけど・・・妙な共通モジュール使ってるもんでたまに困ります。
2005年 10月 20日 (木曜日)
- Work on miau's blog?
さっき書いたアイテムもそうなんですが・・・
(1) 定型作業をスクリプトやらで自動化
(2) 実際の仕事でどんどん使って、機能不足の点は拡張
という仕事のやり方ができたとき、自分で「いい仕事してるなー」と思ってしまいます。
書くまでもないことですが、作業を自動化すると、
・短時間で
・正確に
作業ができるわけです。
「自動化プログラムにバグがあったらどうするんだ」という意見もありますが、バグがある時って処理結果が大幅に異なることが多いですし、結構すぐ気づくものだと思います。
人間が作業した場合はミスしないように毎回気をつける必要があるのに対して、プログラムのバグは一回直せばそれでおしまいですしね。
その過程でスクリプティングやプログラミングの腕が上がっていく、というのもポイント。
よく仕事で「経験を積む」というけど、時間使ってるんだから経験積めるのは当たり前。
知識も技術も普通にやってれば伸びるでしょう。
そこで同時にスクリプトだとかプログラムという形で資産を残す。
そして、使うたびにその資産に磨きを掛けていく。
これ最強。
逆に、効率悪い仕事している人を見るとかなり苛々してしまいます。
正規表現で一発置換できるのに、手作業で一行ずつ編集したりとか。
つまらない作業に時間使っちゃダメですよ。本当に。
2005年 8月 21日 (日曜日)
- Work on miau's blog?
PHP 周りでいろいろあったので、そのお話。
気がついたらまた長文に。
[Read More!]
- Work on miau's blog?
bcp で引っかかった部分のひとつに「フォーマットファイルのフォーマットが正しくありません」みたいなのがありました。
結局文字コードが違うっていうオチだったんですけど・・・まぁその辺りの話。
[Read More!]
- Work on miau's blog?
そんなわけで、bcp でも色々ハマったのでいくつか書いてみます。
(知らない方のために・・・bcp ってのは SQLServer でインポート/エクスポートを行うためのコマンドラインユーティリティです)
[Read More!]