無精で短気で傲慢なプログラマ

UNIX や web やプログラムの技術的なことを中心に。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop

「外国為替レート変換タグ」を直してほしいです

外国為替レート変換タグ が Firefox 3.6.8 で動かない (作者様ページ)。
IE8 では OK。Firefox のコンソールには
  illegal character
  http://raku2fx.com/fxapi-getfx.php?e=ex1&f=USD&JPY&v=5
  (以下文字化け)
と表示されている。
 

http://raku2fx.com/fxapi.js をローカルに保存して、
 function exchange(e, f, t, v, cf){
  document.write('<script type="text/javascript" src="...">

  document.write('<script type="text/javascript" charset="utf-8" src="...">
とすれば動いたので、ぜひご修正いただければと。

Amebaアカウントを取らないと作者様ページにコメントつけられないようなので、
ブログで書いてみました。

…と思ったら、作者様のメインページにメールアドレスが記載されていた。
もう書いちゃったからまあいいか。

※追記
あと、使用方法として
  <script type="text/javascript" src="fxapi.min.js"></script>
とありますが、
  <script type="text/javascript" src="fxapi.min.js" charset="utf-8"></script>
とするか、fxapi.min.js の先頭行に
  @charset "utf-8";
を追加いただければと思います。

Windows のデスクトップ上で行っているからかもしれませんが、UTF-8 で
  <html>
  <head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head>
  <body>
  <span id="ex1" class="fxapi" fcode="USD" tcode="JPY" value="5" format="${v1} は {f2} 円です ({date})。">$5</span>
  <script type="text/javascript" src="http://raku2fx.com/fxapi.min.js"></script>
  </body>
  </html>
というファイルを作成し、Firefox で表示した場合、上記 2点を修正しないと動きませんでした。

スポンサーサイト

PageTop

技術者・SE・プログラマ面接時の技術的な質問事項

最近、技術者やプログラマの方と面接する機会が多いです。
毎回質問事項を考えるのにも飽きたので、再利用できるようにまとめておきます。

もしさわりの質問に対する反応が良かった場合は、さらに突っ込んだ質問
(インデントが深いもの) をします。経験がないようなら、さらっと流します。

当ページ管理人は、現在 EC サイト構築・運営を担当しているため、
そっち方面に偏っています。

最小限の質問でその人のスキルを見極めるのは難しいなぁ…。

-------
●追記
ホッテントリに載ったようなので、このチャンスに 人材募集 を再アピールしておきます。
興味のある方はぜひ。

念のため言っておきますが、全部できないとダメというつもりは全くありません
(当ページ管理人も、CSS・Eclipse・Struts・Spring・Hibernate・Ruby・アセンブラなど、
弱い部分が多々あります)。

「~はできますか?」「できます」というやりとりがよくあるのですが、「できます」の幅が
広すぎるので、そこを見極めるための材料です。

●追記2
> s-miyashita telnet で ftp って、データ送受は許してくれますよね?:)
passive でデータ送受信まで行えば文句なしです :-D

●追記3
「アルゴリズム」を追加しましたが、イマイチ。その他ちまちまと追加 (★部分)。
-------

・UNIX
 ・使用 OS は何か (FreeBSD/Linux/Solaris/UNIX)
 ・grep/tar/find を使ったことはあるか★
  ・cron 設定をしたことはあるか★
 ・パーミッション (chmod 777, chmod rwx など) の意味★
  ・ディレクトリに対する r/w/x はそれぞれどういう意味を持つか (ファイルに対する
   r/w/x との違いは何か)★
  ・1755・2755・4755 それぞれの意味は何か★
 ・パッケージ管理には何を使っているか
 ・configure からアプリケーションをコンパイルしたことがあるか
 ・共有ライブラリとは何か
 ・シェルの役割を示せ (sh や csh が以下の入力を得た後、何を行うか)★
  ・第一段階: コマンドラインにて ls とタイプしたとき
  ・第二段階: コマンドラインにて ls | sort とタイプしたとき
 ・fork/exec する簡単なシェルを書けるか
  ・子プロセスが親プロセスから引き継ぐもの、引き継がないものを、それぞれ数点あげよ★

・言語
 ・どの言語が好きか。使用している言語のバージョンは(言語共通)★
 ・Perl
  ・どのモジュールが好きか
  ・print と syswrite の違いは何か★
  ・Web フレームワークは何を使っているか
 ・Java
  ・Web フレームワークは何を使っているか
  ・「クラス変数/インスタンス変数/ローカル変数のうち、スレッド
    セーフなのはローカル変数だけである」とはどういう意味か
 ・PHP
  ・Web フレームワークには何を使っているか
  ・PEAR で利用しているパッケージは何か
  ・php.ini で定義できる以下のディレクティブの違いを述べよ。★
   ・default_charset
   ・mbstring.language
   ・mbstring.internal_encoding
   ・mbstring.http_input
   ・mbstring.http_output 
   ・mbstring.encoding_translation
   ・mbstring.detect_order
    → 当ページ管理人は全く覚えてません。
 ・Ruby
  ・Ruby に対する熱い思いのたけを述べよ
 ・C
  ・malloc(3)/realloc(3) にて、動的メモリ管理ができるか
   ・リンクリストを書けるか
   ・malloc したメモリは free すべきか★
  ・fputs(3) と write(2) の違いは何か
  ・可変長引数な関数を記述したことがあるか
  ・Makefile を書けるか
  ・コンパイル・アセンブル・リンクとは何か
  ・二乗を返すマクロ #define MY_POW(x) ((x)*(x)) の問題点は何か★

・コンピュータ基本素養
 ・エンコーディングとは。文字集合とは (ISO-2022-JP と JIS X 0208 を
  説明できるか)
 ・RFC を読んだことはあるか。
 ・テキスト領域とは何か。スタックとは何か。ヒープとは何か。
 ・ブラウザに URL を入力してから、ページが表示されるまで、ブラウザや
  OS が行うステップを示せ (5ステップ以上が望ましい)
 ・BNF (拡張BNF) とは何か。簡単な例をあげよ★

・アルゴリズム★
 ・クイックソートの概要を述べよ
 ・O(n) とはどういう意味か
 ・スパム判定に利用されているベイズの定理とは何か
 ・将棋やチェスなどの思考ルーチンで使用されるミニマックス法とは何か
 ・遺伝的アルゴリズムとは何か
 ・"2+4*(8-1)" などの計算式の答えを出すプログラムを書けるか (字句解析/構文解析)★
 ・有限の在庫と、それを買いたい有限のお客様がいる。お客様は、各在庫に
  ついて欲しい順に順位を付けている。
    お客様A: 1番欲しいのは商品x、2番目に欲しいのは商品y、3番目に…
    お客様B: 1番欲しいのは商品y
    お客様C: 1番欲しいのは商品x、2番目に欲しいのは商品z、3番目に…
  お客様に在庫を割り当てるとして、なるべく多くの在庫を割り当てつつ
  顧客満足を最大にする方法を示せ。ただし 1人のお客様には必ず 2個の
  在庫を引き当てる必要がある (1個は NG。3個以上も NG。0個はアリ)。

  なお、この割り当て作業は毎日実施する。在庫状況や、お客様が指定
  する順位は日々変動する。ある日は「お客様Bには割り当てできず」と
  いう状況もありうる (その場合お客様Bの顧客満足は低下する)。
  顧客満足の定義など不明点はおのおの考えること。
   → 「人材募集」に書いた新規サービスにおいて、こういうことをやります。

・データベース
 ・SQL経験
  ・WHERE 句と HAVING 句と GROUP BY 句の意味と、評価順位は★
  ・CASE・UNION・EXISTS の意味は★
 ・データベース利用経験 (Oracle/MySQL/PostgreSQL/その他)
  ・Oracle であれば、テーブルスペース (表領域) とは何か。エクステントとは何か。
  ・MySQL であれば、MyISAM と InnoDB の違い。
 ・ER図とは何か
 ・正規化とは何か
  ・第一正規形/第二正規形/第三正規形とは何か
 ・ACID 属性とは何か
  ・ヒントとして
   ・Atomicity(原子性)/Consistency(一貫性)/Isolation(独立性)/Durability(永続性)
 ・バックアップ/リストアはできるか
 ・レプリケーションはできるか
 ・トランザクションログとは何か (ロールフォワードとは何か)
 ・トリガ・ビュー・ファンクション・プロシージャ・NOT NULL 以外の制約・参照整合性
  制約(外部キー)とは何か★
  ・上記のものを使うべきか使わざるべきか (DB でやるかアプリでやるか)。また、それはなぜか。
 ・ORマッパとは何か。どのORマッパが好きか

・バッチ系
 ・CSV/固定長ファイルを取り込むことはできるか
 ・メール配信ができるか
 ・EDI連携 (受発注や在庫流通などのデータ連携) はできるか
 ・バッチにて途中でエラー終了した場合、
  ・DB を更新するバッチの場合、後始末として何をすべきか
  ・1000人にメールを送るバッチの場合、後始末として何をすべきか
  ・CSV ファイルを出力するバッチの場合、後始末として何をすべきか

・セキュリティ
 ・外部のセキュリティ診断を受けたことがあるか
 ・SQL インジェクションとは何か。その対策は
 ・XSS 脆弱性とは何か。その対策は
 ・CSRF (クロスサイト・リクエスト・フォージュリ) とは何か。その対策は
 ・暗号化知識
  ・ブロック暗号とは何か
  ・公開鍵暗号とは何か
  ・MD5・SHA とは何か。暗号化と一方向ハッシュの違いは何か
 ・日々のセキュリティ情報をどこから入手しているか★
 ・高木浩光を知っているか★

・HTML/Javascript/CSS
 ・HTML
  ・HTML を書けるか
   ・XML を書けるか
   ・XHTML を書けるか
    ・DTD とは何か
    ・DOCTYPE 宣言とは何か
  ・「HTML 4.0 Transitional では IE は quirk モードになる」の意味がわかるか
  ・実体参照とは何か
  ・META タグとは、「何の」META 情報か。
 ・Javascript を書けるか
  ・Ajax な Javascript を書けるか
  ・Ajax ライブラリを使ったことはあるか (jQuery/prototype.js/script.aculo.us)
  ・DOM (Document Object Model) とは何か
   ・getElementById を使ったことはあるか
   ・appendChild でまっさらな HTML から任意の HTML を動的に生成できるか
 ・CSS
  ・CSS を書けるか
  ・padding と margin の違いは何か
  ・CSS Sprite とは何か
 ・その他
  ・favicon とは何か
  ・URL エンコードとは何か
  ・BASE64 とは何か

・Web アプリケーション
 ・CSVファイルをアップロードし、DB に格納するアプリケーションを作成できるか★
  ・CSVファイルをダウンロードするアプリケーションを作成できるか★
  ・動的画像生成経験★
  ・PDF生成経験★
 ・セッション管理
 ・デザイナとの協業経験
 ・SEO を意識して Web サイトを作成したことがあるか
  ・具体的に何を行ったか、効果測定をしたか
 ・リスティング広告組み込み経験
 ・Google Sitemap
 ・全文検索エンジン利用経験 (Namazu/Hyper Estraier/Senna/Lucene など)
  ・n-gram と形態素解析の違いは何か
 ・負荷計測はできるか
  ・どのような負荷計測ツールを使ったか
  ・どのような考え方で負荷計測をしたか (何をもって合格とするか)
 ・クロスブラウザな Web を作成したことがあるか (IE 以外のブラウザ)

・モバイル
 ・モバイルサイト構築経験
 ・公式サイト構築経験
 ・(いわゆる) 携帯 UID とは
 ・画像表示に関する機種ごとの差異を述べよ
 ・HTML に関する機種ごとの差異を述べよ

・ネットワーク管理
 ・Windows または UNIX マシンを、LAN に接続できるか
 ・DHCP サーバがないとして、PC に何を設定すれば LAN 経由で
  インターネットに出られるか
 ・ルータ設定はできるか
 ・DNSサーバ管理はできるか
 ・DNS サーバの役割は
  ・DNS の正引きとは何か、逆引きとは何か
   ・A レコードとは何か、CNAME レコードとは何か、AAAA レコードとは何か
   ・SPF レコードとは何か
 ・FTP における active/passive とは何か
 ・telnet を起動し、HTTP/SMTP/POP3/FTP サーバとしゃべることができるか
 ・メールサーバ管理経験(sendmail/Postfix/qmail/その他)
  ・携帯宛のメール送信はできるか
   ・その場合の注意点は (PC 宛ではなく、携帯宛の場合で気をつけること)
  ・大量メール配信経験
  ・マルチパートメールを送信できるか
   ・(いわゆる)デコメールの仕組みを述べよ
  ・bounce メール処理はできるか
  ・foo.@exmaple.co.jp というメールアドレスが不正であることを説明せよ。
   ・(送信できない環境の場合) どうしてもこのメールアドレスにメールを
    送信したい場合の方法は。
 ・traceroute の動作原理は
  ・UNIX 系の traceroute と、Windows の tracert コマンドの大きな違いは何か
   (ヒント: ICMP)
 ・NAT (NAPT) とは何か

・プロジェクト管理/構成管理
 ・バージョン管理ツールの使用経験 (CVS/Subversion/Git など)
 ・過去のプロジェクトでは、システムは何環境あったか (開発/テスト/本番など)
 ・複数の環境で整合性を取るため、どのような工夫をしたか
 ・Wiki の利用経験

・インフラ管理
 ・Webサーバ(Apache)
  ・どのようなモジュールを使ったことがあるか
  ・バーチャルホストを設定できるか
  ・SSL
   ・SSL 対応ページを準備するまでの手順を示せ (ヒント: 秘密鍵・CSR)
  ・負荷分散の経験
 ・静的 Web ページを高速化する方法を示せ
  ・Apache における ETag とは何か
 ・Web サイトが重いため、定量的な分析を行ってボトルネックを調査したい。
  具体的にどのようにするか。
   ヒント: ネックになっているのは、DB/アプリケーション/帯域/CPU/HDD
       のいずれかとする。どのような分析をすることで原因を突き止め
       られるか。
PageTop

人材募集その2

2年半ぶりの人材募集です。
興味のある方はぜひ。

人材募集詳細
PageTop

find には sh!

ウノウラボ Unoh Labs: コマンドラインで作業する上で知っておくといいテクニック
% find . -name '*~' -exec rm {} \;

404 Blog Not Found:勝手に添削 - find(1)
% find . -type f -name '*~' | xargs rm
% find . -type f -name '*~' | perl -nle unlink

わたしなら
% find . -type f -name '*~' | sed 's/^/rm /'
で確認し、OK なら
% find . -type f -name '*~' | sed 's/^/rm /' | sh
で消します。

いまどき fork/exec rm のオーバーヘッドがどれほどのものか。
xargs を使うとき、rm が 1回だけ実行されるときと、ARG_MAX を超えたときに
rm が複数回実行されるときの違いにどれほどの差があると言うのか。
誤差の範囲である。

コンピュータが速くなった今、重視すべきは確実性。
% find . -type f -name '*~' | sed 's/^/rm /'
として、
rm ./hoge~
rm ./dir/fuga~
rm ./foo/bar/baz~

という出力をじっくり眺め、問題がないことを確認する。OK なら、最後に "| sh" をつけて
% find . -type f -name '*~' | sed 's/^/rm /' | sh

とする。

削除してマズいファイルを見つけたら、grep -v で除外すればよい。

find コマンドは、人が使うには難しすぎる。なんだよ {} \; って。
xargs コマンド は、何をするコマンドなのかさえ直感的にわかりづらい。
わざわざ難しいことをする必要はないではないか。

単純なファイル削除ではあまり利点が見えないかもしれないが、便利なのは例えば
% find . -name \*.html | sed "s|\(.*\)|command < \1 > out/\1 | "
などというとき。出力が
command < hoge.html > out/hoge.html
となっていることをじっくり確認して、最後に "| sh" を付けて実行する。

何が起こるかは出力をじっくり観察すればわかる。見よ、この安心感。


…ってちょっと無理があるか? sed の基礎はおさえておかなきゃいけないし、
メタキャラクタ入りのファイルに弱いしなぁ。

sh をつけるやり方を流行らせたいんだが、無理かなー。いやほんと、便利よ。
最初の数行だけ試しに実行したかったら出力をマウスでコピペすればいいし、
コマンドラインだけでがんばるのが厳しかったら、ファイルにリダイレクトして
エディタで中身をいじって
% sh < command.txt
としてもいい。


ちなみに環境により挙動が異なる echo(1) は使わず、printf(1) を使うのが
POSIX 的な解かと思います。といっても、まわりの人が全然知らないので
仕事ではあえて使わないけど。
PageTop

web 開発のヒアリングシート/チェック項目

要件定義のヒアリングシートはいくつか見たことはあるが、web 開発に
特化したまともなヒアリングシートを見たことがないので作ってみた。
「サイトの目的は」などの上流部分はあえて省いて、機能・実装にフォーカスしている。

思いつくままに記述してみたが、結果としてはインターネット上の
コマース向けサイトに特化した形になった。

請負時のヒアリングシートと、発注時の要件伝達漏れチェックシートと、
開発時のレビュー観点の元ネタとして使えるといいなぁ。今後気づいた
ところがあれば追記していきます。

●2010/02/24 追加分。
- サイトメンテナンス時のアナウンス要否
  - メンテナンスページは「503 Service Temporarily Unavailable」を返すようにし、
   検索エンジンにキャッシュされないよう注意する。

●2007/08/23 追加分。
404/403/500 などのエラーページについて
  - できる限り ErrorDocument 404 http://example.com/error404.html などの絶対 URL
   ではなく、ErrorDocument 404 /error404.html と相対 URL で書く。
   参考: ErrorDocumentを絶対URLで書くのはやめようよ

●2007/07/22 追加分。
入力フォームについて。
 - 半角のみ・全角のみの場合は、ime-mode の active/inactive を設定する。disabled は
  設定しないことをおすすめする (メールアドレスを disabled にしてしまい
  日本語ドメインが入力できなくなる、といった事態は避けたい)。現時点
  では IE6/IE7 のみ。Firefox はバージョン3で対応予定 →参考

●2007/05/01 追加分。
  - ファイル一覧・CVS ディレクトリ・.htaccess・.htpasswd など、見えてはいけないファイルの隠蔽
    - ファイル一覧が見えてしまうようなら、とりあえず Options -Indexes。
    - さらに DirectoryIndex ディレクティブを適切に設定する。
    - CVS/ などの管理用ディレクトリは DirectoryMatch などで deny。
    - .ht から始まるファイルは、apache のデフォルト設定で <Files ~ "^\.ht"> されているので
     問題ないはずだが、誤って見えてしまっているサイトが結構ある。

●2007/04/22 追加分。
  - http://www.exmaple.com と http://exmaple.com のどちらが正式 URL かを明確に決める
   - いずれにしても、www あり・なしの両方でアクセス可能なようにする
   - たとえば www ありが正式な URL なら、www なしの方は www ありにリダイレクトする
   - URL をうろおぼえで入力する人や、印刷された URL を入力する際にwww 有無を
    間違えることは結構ある。間違った URL でも、とにかくサイトにたどりつける
    ようにはしておく。
   - www あり・www なしの両方でサイトが閲覧できるようにはしないこと。両方とも
    検索エンジンに拾われると、集客が分散してしまう。必ず片方はリダイレクトする。


----------- ここから ------------
●コンテンツ
- サイト内検索有無
- ランキング系コンテンツの有無
  - ランキング生成ロジックは?
  - リアルタイムに生成? バッチで生成?
  - 管理者がランキングを自由に設定できる必要あり?
- 画像・アイコン有無
  - flash の有無
  - マウスオーバー用の画像要否
  - img 要素の width/height 属性を付ける
   - 多種多様な画像サイズが存在し、なおかつ自動で更新されるような場合、
    width/height を事前に調べるバッチの要否を検討
  - 携帯端末用画像ファイル生成が必要か?
    - 端末ごとに、フォーマット・画像サイズに制限がある
  - favicon.ico
    - IE7 のタブに favicon が表示されるので、忘れずに作成したいところ。
- ヘッダ・フッタ有無/種類数
  - ヘッダ・フッタを表示しない例外ページはないか?
- RSS の有無
- 会員規約/利用規約の有無
- 会社概要の有無
- サイトマップの有無

●Web ポリシー
- 想定の回線速度
- 対象ブラウザ
  - IE6/IE7/Mozilla/Firefox/Safari/Opera/...
- Javascript 必須でよいか?
- cookie 必須でよいか?
- Javascript/cookie を解さないブラウザがきた場合、入り口ではじくべきか?
- 想定の画面解像度
  - ブラウザ左のツールバー・エクスプローラバーの存在を忘れずに
  - 画面横幅固定? 可変? 範囲指定? (max-width、min-width)
  - 画面横幅固定の場合、センタリング?
- web エンコーディング
  - 個人的には EUC-JP だが、使用したい文字によっては UTF-8 もあり。
  - 携帯なら実質 Shift_JIS
- 長い文字列 (ユーザが長い文字列や URL を入力した場合の対応)
  - Firefox はブロック要素を突き破ってレンダリングしてしまう (CSS の
   規格としては誤りではないが、これが原因でデザインが大崩れしたりして
   よくモメる)
   - 対策その1: css で word-break: break-all; overflow: hidden
    (Firefox では長い部分が隠れる。overflow: auto でスクロール
     バーを出すのもアリだろう)
   - 対策その2: 一定文字数ごとに、wbr 要素・ソフトハイフン (&shy;) の挿入
   - 参考: 長い文字列の改行方法 - wbr, &shy;, css
   - 参考: Firefox 3 の修正内容のご紹介 その3 ― URLも改行されるように
- リンクポリシー
  - 外部サイトに飛ぶ場合は target="_blank" とする? 同一ウィンドウに表示する?
- ポップアップ
  - ポップアップを実装する場合、ブラウザのポップアップブロック機能に邪魔
   されないよう気をつける (必然性のある場合のみ実装しよう)
  - ボタン押下でポップアップ表示 → ポップアップのウィンドウが背面に隠れる →
   再度ボタン押下、とした際、最前面に表示されるようウィンドウを focus() すること。
- 404/403/500 などのエラーページのカスタマイズ要否
  - できる限り ErrorDocument 404 http://example.com/error404.html などの絶対 URL
   ではなく、ErrorDocument 404 /error404.html と相対 URL で書く。
   参考: ErrorDocumentを絶対URLで書くのはやめようよ
- 機種依存文字の有無
- 携帯の場合、絵文字の有無 (キャリアごとに互換性がまったくなく、一から実装すると
 かなりしんどい。絵文字ライブラリの購入も検討するとよい)
- Google Analytics 設定要否
  - SSL の場合は https の方を読むよう注意
- Google Sitemap 設定要否

●入力フォーム
- 入力補完
  - 全角半角自動変換
  - 前後の空白・タブの自動除去 (メーラー・Excel からコピペした場合によく空白がつく)
- エラー時の挙動
  - Javascript によるチェック要否
  - エラー表示方法
    - 画面上部にまとめてエラー内容を表示する?
    - 各 INPUT 要素の上下にエラー内容を表示する?
- submit ボタン連続押下対策要否
  - うっかり連打した場合を考えると、2回目の処理がエラーとなり、
   「エラーです」と表示されるのはよろしくない。
- 固定幅フォント
  - メールアドレス入力フォームなどは font-family: monospace で固定幅フォントにする
   (カンマとドットを判別できない人が多いため)
- 半角のみ・全角のみの場合は、ime-mode の active/inactive を設定する。disabled は
 設定しないことをおすすめする (メールアドレスを disabled にしてしまい日本語ドメイン
 が入力できなくなる、といった事態は避けたい)。現時点では IE6/IE7 のみ。Firefox は
 バージョン3で対応予定 →参考
- モバイルの場合、input 要素に istyle, mode, format 属性を指定
 することで全角かな/半角カナ/英字/数字が指定可能。→参考
- input 要素の maxlength は指定しない
- チェックボックス・ラジオボタンには label 要素必須 (わたしの趣味)
- TEXTAREA には wrap="off" 必須 (わたしの趣味)

●メール
- メール送信有無
- 携帯にも配信するか?
  - キャリアに SPAM 判定されないための対策が必要。
    - 適宜 sleep を入れる?
    - 高速配信エンジンを利用する?
- エラーメール対処
  - エラーメールが返ってきたら、どうする?
    - ヘッダに X-HOGEHOGE-ID: などと独自ヘッダを付け、/etc/aliases 経由で
     エラーメールの X-HOGEHOGE-ID を解析するのが好き。
  - エラーメールを管理者がチェックする必要があるか?
- メールアドレス形式チェック
  - 携帯の場合、「顔文字@docomo.ne.jp」などのメールアドレスが平気で
   使用されるので、あまり厳密にチェックしない方がよい。
  - 携帯の場合、「.hoge@example.com」など RFC 違反のメールアドレスが
   利用可能なため、あまり厳密にチェックしない方がよい。
  - Postfix はデフォルトではハイフンから始まるメールアドレス宛に
   送信しないことに注意 (RFC 的にはハイフンで始まっても問題ない)。
   allow_min_user=yes で送信可能。
- メールのエンコーディング
  - ISO-2022-JP が無難だが、半角カナを含む場合は要検討
  - UTF-8 で送る場合は、配信先メーラーの対応状況をチェック
- メールマガジン有無
  - ユーザごとに異なる文面のメールを送る?
    - 冒頭に「○○さん」と顧客名を出す?
    - リンク押下を追跡できるよう、メール中の URL に一意なパラメータをつける?
  - 配送予約要否 (n日の AM 9:00 から送信開始、など)
  - 夜間配送 OK?
    - 携帯電話の場合、夜間のメール送信はクレームにつながる
- 1行あたりの文字数
  - sendmail だと確か 1000バイトで強制的に改行を入れるはず
  - 1行が長い CSV ファイルなどをメールでそのまま送る場合は注意

●CGM
- CGM の有無 (Consumer Generated Media: ユーザ参加型コンテンツ)
- 管理者による投稿内容チェックが必要か?
  - 事前チェック? 事後チェック?
  - ユーザからの通報機能は必要?
  - ブラックリスト方式による自動通報機能は必要?
- ユーザへの警告通知/投稿禁止/強制退会機能の有無

●SEO・SEM
- TITLE 要素
- META タグ
  - keywords 有無、動的/静的
  - description 有無、動的/静的
- URL 静的化 (foo?a=b&c=d ではなく foo/b/d とする、など)
- ALT 要素
- URL にキーワードを含める?
 (Amazon のように、商品名を URL エンコードして URL に埋めたりする?)
- モバイル検索に対応する?
  - DoCoMo と au が検索サービスを開始した。モバイルの検索は、今かなりアツい。

●アナウンス
- アナウンスは必要?
  - トップページのみ? 全ページに表示する?
- サイトメンテナンス時のアナウンス要否
  - 「現在メンテナンス中です」と表示するために、別マシンや別 web サーバを
   用意する必要がある?
  - メンテナンスページは「503 Service Temporarily Unavailable」を返すようにし、
   検索エンジンにキャッシュされないよう注意する。

●業務系
- ユーザ種別 (一般/会員/特別会員/代理店/管理者/スーパーユーザなど)
  - 何種類?
  - 役割は?
- 利用する場所は? (自宅/社内/営業所/出張先/取引先)
- 認証有無
  - パスワード忘れの場合は? リマインダ?
  - BASIC/Digest 認証?
  - セッション用 cookie 発行?
  - ルータによる IP アドレス制限?
- 承認フローが必要な部分は? (上司が承認ボタンを押さないと公開されないなど)
- マスタは?
  - どんな種類のマスタがある?
    - 部門マスタ/取引先マスタ/担当者マスタ
    - 商品マスタ/在庫マスタ
    - 郵便番号マスタ
    - 銀行マスタ (金融機関コードなど)
    - 営業日マスタ
    - 商品区分マスタ
    - 消費税マスタ
    - 和暦マスタ
  - マスタは初期設定のみでよい? 自動流通? 管理画面から参照/編集可能?
- Excel・Word・PowerPoint ファイルを生成する必要は?

●広告
- 広告有無 (サイトを広告媒体化する?)
- 予約機能有無 (n日の 0:00 から表示開始、など)
- 会員登録時に、ユーザの属性 (性別/年代/都道府県など) を尋ねておく必要あり?
- ページごとに、表示する広告を変えたい?
- ユーザの属性ごとに表示する広告を変えたい?
- PC/モバイルごとに表示する広告を変えたい?
- ランダム表示あり?
- テキスト広告? 画像広告? flash 広告?
- 表示条件は、期間設定? 表示回数? クリック回数?
- レポート機能有無
  - CSV を吐き、Excel で整形してもらう?

●ログ・監視系
- アプリ出力のログ内容は?
  - エラー発生時?
  - バッチの開始/終了メッセージは?
    - 開始/終了の際は、日時と「開始しました」「終了しました」をログに
     残そう。実行されていたという記録になるし、実行時間の計測もできる。
  - 管理者の操作を記録する?
- ログローテート方針は? 年月日付きのファイル名に出力する?
- ログのフォーマットをかっちり決めてしまおう。おすすめは↓ (grep したときに
 わかりやすいように作る)
  YYYY/MM/DD HH:MM:SS プログラム名(プロセスID) ステータス ログ内容
  例:
  2007/03/29 03:52:34 mailsend.pl(7223) INFO 開始しました
  2007/03/29 03:52:35 mailsend.pl(7223) INFO 商品発送メール送信。会員ID[2422] オーダID[39273]
  2007/03/29 03:52:35 mailsend.pl(7223) ERROR 発送状態ステータス異常。送信スキップ。会員ID[4522] オーダID[32324] ステータス[3]
  2007/03/29 03:52:36 mailsend.pl(7223) INFO 終了しました
- 保存期間は?
- 保存対象は?
  - アプリ出力のログ
  - SMTP サーバ等ミドルウェア出力のログ
  - OS 出力のログ
- ディスク容量監視/自動通知
- 負荷監視/自動通知

●インフラ/システム
- 自社内サーバ? ハウジング? レンタルサーバ? 共用サーバ?
- DB 有無
  - レプリケーション有無
  - トランザクションログ有無
- SSL 有無
  - 携帯端末の場合は対応認証局が少ないため、ベリサインにしておくのが無難
  - SSL から非 SSL ページの画像や CSS・Javascript などを呼ぶと、IE は警告が出る
   (共通ヘッダなどで src="http://example.com/common.css" などと書き、SSL
    ページからそのヘッダを使用すると警告のダイアログが表示される)
- RAID 有無
- バックアップ
  - タイミング (日次/週次/月次/年次)
  - 対象
    - プログラム
    - データファイル (自動生成される CSV など)
    - DB (フルダンプ/トランザクションログ)
  - バックアップ先 (自サーバ内/他サーバ/テープ)
- ドメイン取得有無
- サブドメイン設定有無
  - cookie 対応
- DNS 設定有無
  - http://www.exmaple.com と http://exmaple.com のどちらが正式 URL かを明確に決める
   - いずれにしても、www あり・なしの両方でアクセス可能なようにする
   - たとえば www ありが正式な URL なら、www なしの方は www ありにリダイレクトする
   - URL をうろおぼえで入力する人や、印刷された URL を入力する際にwww 有無を
    間違えることは結構ある。間違った URL でも、とにかくサイトにたどりつける
    ようにはしておく。
   - www あり・www なしの両方でサイトが閲覧できるようにはしないこと。両方とも
    検索エンジンに拾われると、集客が分散してしまう。必ず片方はリダイレクトする。
  - MX 設定
  - au 宛に送信したメールについて、エラーメールを受け取りたい場合は SPF 対応が必要
- 開発環境・テスト環境の有無
  - 開発環境・テスト環境・本番環境の 3本立てが望ましい (DB も別)

●セキュリティ
- XSS
  - 表示の際に、実体参照化すること
  - 実体参照化する文字は < > ' " &
  - あらゆる箇所で実体参照化するのを忘れずに。
    - input 要素の value 属性内、a 要素の href 属性内、javascript 内、
     title 要素、meta タグなどは、実体参照を忘れがち。
    - href="hoge?a=b&c=d" は誤り。href="hoge?a=b&amp;c=d" が正しい。
- SQL インジェクション
  - あらゆる箇所でバインドを使う
- コマンドインジェクション
  - sh を実行させない
- セッション固定化 (Session Fixation)
- CSRF
- パストラバーサル (ファイル名をパラメータで受けてしまい、../../data/hoge.csv などが
  漏洩してしまう
  - そもそもファイル名をパラメータで受けない。ファイル ID などを受け取り、
   ファイルID を元にファイル名を決定するようにする
- ドキュメントルート以下に、できるだけデータファイルを置かない
- 事前に漏れては困るコンテンツがあるか (URL が推測可能になっており、
  入試結果発表データなどが漏洩してしまわないか)
- サーバ内にアンチウィルスソフトが必要か
- DB などのパスワード
  - ソースファイルに直接記述しない
   (.htaccess などの設定ミスでソースが丸見えになっても大丈夫なようにする)
  - 設定ファイル化したとしても、ドキュメントルート以下に置かない
   (誤って Options +Indexes とした場合、設定ファイルを発見されてしまう)
- apache のバージョン隠蔽 (ServerTokens と ServerSignature の設定)
  - 個人的にはどうでもいいと思っているが、脆弱性診断などでは指摘されて
   しまうので。
- apache のマニュアルページ
  - http://example.com/manual/ で apache のマニュアルが見えてしまうと、
   ちょっと恥ずかしい。DocumentRoot は必ず /home/service/www/ などに
   変更しよう。
- ファイル一覧・CVS ディレクトリ・.htaccess・.htpasswd など、見えてはいけないファイルの隠蔽
  - ファイル一覧が見えてしまうようなら、とりあえず Options -Indexes。
  - さらに DirectoryIndex ディレクティブを適切に設定する。
  - CVS/ などの管理用ディレクトリは DirectoryMatch などで deny。
  - .ht から始まるファイルは、apache のデフォルト設定で <Files ~ "^\.ht"> されているので
   問題ないはずだが、誤って見えてしまっているサイトが結構ある。
PageTop
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。