トップ 最新 追記

日々の破片

著作一覧

2012-04-05

_ ユーザ入力の住所は怖い

データベースには、ADDRESSみたいなカラムがあり、そこはvarchar(64)みたいになっているとしよう。

で、これまでは従業員が入力していた(たとえば、客が書いた配送先住所を手打ちで入れていたりとか)とする。

「これまで」というくらいだから、何も考えずにシフトJIS(でもその実体はWindows-31J)にしていたことだろう。

で、なぜかそれをユーザーがWebから直入力できるようにしてしまったとする。

これは、つくづくと相当な死亡フラグなのだが、問題となったという事例を見ない。

不思議だ。他の人たちはどうやっているのだろうか?

ユーザーは、こちらが驚くほど多様だ。

たとえば、「ザ・グレート歌舞伎町」というマンション名があるとする。

「・」を知っている人は「/」を変換するだろう。知らなくても普通はそう入力するような気がする。全然知らなくても「中黒」という用語を知っていれば変換できる。

でも、「ザ◦グレート歌舞伎町」と入力してくる人がいる。(WhiteBullet \u25e6)

あるいは「ザ•グレート歌舞伎町」(Bullet \u2022)も普通にいる。

これらは、最後にはデータベース内に「ザ?グレート歌舞伎町」として格納されて、気づいた人が「なんじゃこりゃ?」と騒ぐことになる。

「-」も鬼門だ。長音「ー」や「-」(全角マイナス)「―」(ダッシュ)「‐」(ハイフン)あたりはなんとなくわかる。「歌舞伎町3‐2‐1」とか書くなら、本来はハイフンのはずだが、これがダッシュやマイナスでもそれほどは困らないし、長音なら置き換えようという気にもなる。

しかし、現実は「―」(Horizontal Bar \u2015)や「‑」(Non-Breaking Hyphen \u2011)「—」(Em Dash \u2014)「⁻」(Superscript Minus \u207b) など、どうやって入力したんだろう? というような文字がたくさんでてきて、気づくと住所は「歌舞伎町3?2?1」になっているわけだ。

対応するにはどうすれば良いのだろうか?

1) データベースの文字コードをUnicodeにする。DM印字とかは多少の字体の違いには目を瞑って入力されたものをそのまま利用する。

これが無難な気がする。

2) WebページをWindows-31Jとして、POSTデータもWindows-31Jでエンコードさせる。

これが成功するかどうかは良くわからない。エコーバックした時点で文字化けしたというユーザークレームを招くだけのような気がするが。

3) 中黒やハイフンに似たすべての文字を洗い出して変換表を作る。

挫折しますた。諸外国の言葉まで含めると中黒やハイフンの代わりに利用できそうな文字はたくさんあり過ぎる。

4) 利用可能な文字コードのセットを使って、文字チェックをする。

しかし、普通のユーザーに「入力された『ザ•グレート歌舞伎町』は利用できない文字が含まれています」って、そんな間違い探しさせるのか? というか、普通に中黒を出せない人だから、そんな妙な入力をしているわけだろうし。

5) 住所入力専用の賢いソフトウェアキーボードウィジェットからしか入力できないようにする

思いっきり不便な気がするのだが。漢字部分だけはキーボードを使わせて?

6) はて困った。

というわけで、みなさんは、どのように対応されているのだろうか?

本日のツッコミ(全8件) [ツッコミを入れる]

Before...

_ arton [むむ、住所だけじゃなくて名前も実はまずいことに気付いた。「髙井」さんとか。]

_ foa [SJIS Oracleに繋いだRails業務アプリやってますが、DB上は―とかの実体参照形式で保存して..]

_ arton [おお、そういう方法も取れますね!参考になります。それだとブラウザが実体参照を送ってくるのと整合性があって良いですね。]


2012-04-03

_ 生存戦略そこが聞きたい

secondlifeさんの『なぜ XXX がダメか』を読み、いろいろ去来するものがあるのだ。胸ではなく脳を。

特に、なぜMochiKitの選択で謝っているのかは知りたいところだ。進化が止まった点なのか、それとも別の問題なのか。前者なら、SI的な視点からは逆に安定性という意味で問題ない選択ということになるし(つまり、それはそれで参考になる選択であったわけだし)、後者ならそれはケーススタディとして知りたいところだ。

で、まあ過去10年以上、おれさまプロトコルかHTTPかとか、DCOMかおれおれXML-RPC over HTTPかとか、貴族なXMLとボヘミアンなXMLつまりDTDかWXSかRelax-NGか無手勝かとか、おれさまかStrutsかとか、おれさまかSpringかとか、ASP.NETのWebFormかMVCかとか、WFCかASMXかとか、XMLかJSONかとか、何度も選択の必要があり、勝ち残ったものを選んだこともあれば、消えたものを選んだこともあり、まだ様子見なものもありといろいろだが、今のところは、インフラの上に直接薄いおれさまを置くとか、仕掛けが薄くてエミュレートしやすいものを選ぶというのが、一番生き残って成長もしている(Strust1.2だか1.3だかも生き残っているようだが、これとインフラの上に厚いおれさまというのはいじってはいけないものっぽい。図版参照)、流行関係ないからだ。あと、HTTPは正解だったとつくづくと思う。

起こさないで、自分で起きるから

写真は4travel.jpへ直リンク

で、生き残ったもののパターンについて考えてみると、以下の共通点がある。

・コンパクト

・インターフェイス(界面)下の再実装がしやすい

・インフラが見えやすい=インフラの再構成または単純な拡張であって、インフラの再構築ではない

・インフラ自身がコアAPIに近い(DCOMは、DCOMというインフラそのものが分厚い。HTTP(をインフラとして考えた場合)はTCP/IPが透けて見える(0.9とか1.0は。1.1になると相当厚みが増しているけど)。

今となっては、いじってはいけないになっているが、Struts1.xはこの条件に適合している。

で、さらに考えると、Railsが見事に違うんだよな。

まずコンパクトではない。再実装するのは無理がある。しかもRubyの再構築だ(ActiveSupport)。でも、現在に至っても悪い選択には見えない。というよりも、良い選択肢のままだ。

理由の1つは、ユニットテストのサポートのために、それなりにモックしやすくできているの(に代表されるわけだが、ユニットテストを記述しやすく設計されている点)が、大きいのかも知れない。これが通っているので、他の難点を潰せている可能性がある。


2012-03-31

_ 仮想ホストの罠

httpsなホストが動いているapacheに、もう1つhttpsな仮想ホストを追加しようと考えた。

で、テスト用の認証局からサーバーの俺様証明書を作ったりしてごちゃごちゃと仮想ホスト用のhttpd.confをきったりして、service httpd restart。ここで、サーバー証明書はパスフレーズなしの秘密鍵で作っとかないとapacheというかmod_sslがパスフレーズを聞いて来て厄介だということを知った。が、それは余談。

で、ブラウザーからアクセスすると、当然のように、危ない証明書の警告が出る。で気にせず進めて動作を確認してから、俺様認証局の証明書をブラウザーにインストールしてやり直した。

はて、相変わらず危ない証明書と文句を垂れるぞ? と、不思議になる。認証局の証明書はちゃんと入っているしなぁ……

で、サーバー証明書を表示したら、既に動いているホストのやつが出てくる。ホスト名が違うから、危ないって言っているのか!

で、新たに追加したホストのhttpd.confをチェックするが、秘密鍵も証明書も正しく俺様ファイルを参照するようになっている。

ログをみると……アクセスされていない。でも待て、アクセスしているわけだが。

という順序で調べたので、原因にたどり着くまで時間がかかった。

リクエストヘッダーを参照するには、復号されている必要があるってことだろうなぁ、と同僚と納得し合ったのだった。


2012-03-30

_ 買った読んだ

もやしもん(11) (イブニングKC)(石川 雅之)

まあ、内容はともかく、引っ掛かった、引っ掛かった、25万分の1に引っ掛かった。

オリゼによるポリオのワクチンについての豆講座が入っていて、それ自体は、途中まで筋道が通っていて、ふむふむそうなのかと読むわけだ。

1960年ちょっと前にポリオ大流行(といっても病気が病気なので全国で数1000人という規模)。

子供のころを思い起こせば、小児マヒで車椅子というのは、一つの主人公が美談を作るためのパターンとなるくらいには流行した。肩を壊して通院していて知り合った、入院している車いすの少年の夢をかなえるために主人公が奮起して優勝するとかね。

で、最初、不活化ワクチンを使っていたのだが、これが予防にはきくが、現にウィルスがうようよしているところでは、あまり効き目が無い。

そこに、どうにか日米安保(まだ締結する前だと思った。というかおれも生まれていない)の足を引っ張りたいソ連から、効き目ばっちりの生ワクチンを提供するという申し出がある。

それを無視する自民党政権。

でも、最終的には国民の声に押されて生ワクチンを認可するのだが、ソ連は関係なく国産するのかな。ちょっと忘れた。

効き目は抜群で、またたくまにポリオは激減し、上で書いたような美談の中でしか登場しない病気となり、そのうち、美談の中にも出なくなった。

そうやって国内生産ができるようになり、しかも効き目があるとなると、産業として成立し、かつ実績と前例ができるので、前者は経済、後者は政治のアーキテクチャがあるから、変えられなくなる。

となると、国内に関してはウイルスそのものがいなくなったにも関わらず、不活化ワクチンに戻すということができなくなった。

問題は生ワクチンは、あくまでも生ウイルスだということで、一番危険な数字を持ち出すと250000人に1人は、副反応として感染してしまう可能性がある。不活化ワクチンにはその危険性はほとんど無い。

これは、おかしいだろ? とオリゼが叫ぶ。

うむ、そうだなぁと読み進むと、突然、オリゼがむちゃくちゃを言い出す。しょせん菌だなぁ。

親にとっては、250000分の1という数字には意味ないですよね? 我が子が罹患するかしないかの1/2です!

いやいやいやいや、それはないだろう。

こういうたわけた物言いが入ると、とたんにげんなりしてしまうのだった。

良い日本人が1億人いるとして、しかし犯罪率から25万人に1人は殺人を犯す悪い日本人です。でも、親にとっては殺されるか殺されないかの1/2ですよね。隣人の日本人を撃ち殺しましょう。

それは理屈ではなく、単なる扇動だ。(似たような扇動をさんざん見せられたのが、まさに昨年のことだった)

というわけで、なんかとても気分が悪かったせいで、本編も今一つ。ただ、美空が宙をばたばたしてから、ふとあきらめるところでは笑ったけどな。

神奈川県は地方行政として不活化ワクチンの接種に取り組んでいた(民主党政権が今秋から導入としたので今年3月末でやめるらしいけど)ようだ

# 百日咳を巡って2種か3種かという選択はあって、子供には確か2種を受けさせたのだが、今は焦点はポリオに移って、百日咳ワクチンは問題なくなったのか?

jaWikipediaだと、百日咳は不活化ワクチンに問題があって、微妙な対応をしつつ1994年(これも非自民政権だ)に仕切り直しがあったみたいだな。年金の問題とか厄介なこともあるし、動きは遅いかも知れないけど、厚生労働省は仕事をしているなぁ。


2012-03-29

_ 買った読んだ

軍鶏の最新刊が出ていたので買ったのは良いが、表紙に見慣れぬ男がいる……誰だ、このごっつい抜け作は?

軍鶏(27) (イブニングKC)(たなか 亜希夫)

画が洗練され過ぎたんじゃないかとか(試合の動きは美しいのだ)。黒崎以外はみな違う人間に入れ替わってしまったような印象を受ける。

にも関わらず、試合運びは、直観で敵の強さを見抜きひたすら逃げて、しかししょうがないので開き直って(ここでレフリーに、「やめられるならやめてぇよ」とか捨て台詞を吐くのは、うまい)、考えろ考えろと頭を使って対抗策を練る。何にも変わっていない。

まあ、このまま惰性で最後まで買うかも知れないが、社会から隔絶されてしまって、肉体の躍動を描く画家の作家主義だけが残った残骸のようなマンガになってしまったなぁ。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|

ジェズイットを見習え