派遣プログラマ時代の思い出

sxchu_1217630.jpg

2010-08-19 追記
ごめん、今更なんだけど、見積もりは「60%と90%」じゃなくて「40%と90%」だったような気がしてきた。まあ本質的には大きく違わないんだけど。この考え方の背景はこちらをご覧ください。

システムの納期とは確率分布だ-Publickey

(追記終わり)

派遣PGとしてひどい目にあった人がいて盛り上がっている。

  • 某N社で「メソッドを作ると処理が上下に飛んで可読性が落ちるので、出来る限り一つにまとめてください」と言われたことがある。僕は300行で挫折したが、1万行メソッドを書ききった強者がいた。クラスを作るには申請書が必要だった。
  • 「これ参考にしてください」と言って渡されたフローチャートは双六のようで、最後から一つ手前に「仕様変更で振り出しに戻る」と書いてあっても驚かないような代物だった。

Togetter-「派遣PG時代の思い出」

で、紅茶屋さんが、そうはいっても、最新技術を追いかけ回す企業が旧態依然とした企業より生産性が高いとは限らないよ?とのご指摘。

現場を変えようと取り組んでも結果として何も変わらないことはよくあります。また、よしんば何か新しいものが導入されても最初の目論見からはねじれた形で運用されてしまうこともあります。
慣習やしがらみという壁はそれほど厚いものです。オフコンが反対の部屋でいまだ現役でデータをあげてくるのに、自分のまわりだけ新しい体制を導入したのではひっかきまわすだけです。運用教育にまつわるコストは、おそらくWEB系の方々が思われているほど低くはありません。
ITドカタを笑ってすましてちゃだめだろ-紅茶屋くいっぱのあれこれ日記

 それはその通りなんだけど、その筋で考えると結局、一般兵は最新技術なんか追いかけ回さずに軍曹の言うことを素直に聞いてりゃいいんだ、という結論になってしまって、
それだったら結局、件のtogeterのエントリを見て笑っておくのが一番精神的に健康が保てるような気がする。

どうしたらいいかは自分にも分からないのだけれど、過去に真逆の現場を見たことがあって、これはこれで珍しい話のような気がするから書いてみる。
数百人規模のエンジニアが一つのプロダクトを開発しているのに、見通しのいいコードを書こうとする文化が存在していて、プログラマの見積もりがそれなりに当たるようになる魔法のメソッドが存在した現場の話。ラピュタは本当にあったんだ!
sxchu_431877.jpg

(注:画像は全部イメージです。ここで述べている会社とは関係ありません。)

その製品は、外資系の会社と日本の会社が合併して出来た会社の製品だった。ので、本国にもエンジニアがいっぱいいるし、日本にもエンジニアがいっぱいいて、トータル数千人規模の開発じゃなかったかと思う。全容は把握できなかったけど。
過去10機種以上が同じソースコードの上に開発されていて、そこに機能を追加したり、場合によっては既存のコードをいじったり。数機種の開発が並行して進んでいた。
あっちの不具合がこっちの開発に影響したりしないために、機種ごとにブランチが切られていた。
というか、実はブランチがプログラマの人数×数倍存在していて、プログラマはそれぞれ自分のブランチ上で開発ができる、すんごい規模のソースコード管理システムが動いていた。機種コードネーム+社員IDみたいなブランチの命名規則があった。

この規模になると、自分のコードをマスターにマージしようとしても、そもそもマスターがバグっていて動かないとか言うことは普通にあった。でも、あんまり困らなかった。
あとで書くけど全体としてスケジュールはゆるかったから、マスターが動かない時は、動くようになるまで一週間くらい放っておくこともあった。
せっぱ詰まった人が文句言って、当事者か上級エンジニアが直していたのだと思う。末端のエンジニアからしたら、一週間待てば勝手に直るイメージだった。

sxchu_1072482.jpg
Q:一週間待つってどういう事?なんでそんな緩いの?
A:プログラマが見積もりを出す時は、「90%の確率で実現可能な納期」と「60%の確率で実現可能な納期」というのを見積もる。つまり、前者はよほど致命的な問題が見つからない限り実現可能な納期で、後者はたいていの物事がうまくいった場合の納期。
マスターブランチにマージするのは、60%と90%の間のバッファの時期にリリースする事になるから、今日中にリリースせねばならない的な圧迫感のある状況に追い込まれることは滅多になかった。
チームリーダーも、「○月○日がデッドラインだ!」みたいなことは言わなくて、「今月くらいでできあがる時期のはずだから、タイミングを見てリリースしてね。出来たら報告してね」みたいなノリだった。

あと、全体にスケジュールはゆったりしていた。最初、普通に日本の開発現場のつもりでぎりぎりの見積もりを作ったら、「本当にそれで出来る?本当に実現できる数字を聞かせて。見積もりが大きかったら機能を切って調整できるけど、出てきた見積もりが遅れた時はとても困るんだ」と言われた。
でも、競合する日本製品と出荷ペースはあんまり変わらなかった。
理由は分からないんだけど、プログラマをぎりぎり締め上げてスケジュールを短縮しても、いい加減なソースコードを書いたり、どうしようもないプログラマを入れてしまったりして遅れる分が出てくるから、最終的にできあがるペースは案外変わらないのかも。
実際、ドキュメントとかも大量に作られていたし、レビューもしっかり行われていて品質はとても高かった。

sxchu_1171248.jpg
Q:不具合管理は?
A:バグトラッキングシステムが存在して、プログラマと同じ人数くらいのテストエンジニアがいた。
そのテストエンジニアが担当のモジュールをテストして、出てきた不具合をバグトラッキングシステムに登録していた。
プログラマが自分で見つけた他のモジュールのバグをあげることもあった。

ここまでは普通。普通と違ったこと。
1.テストエンジニアは派遣会社から連れてこられた素人じゃなくて、テストの理論を把握していて自分でテスト計画を立てたりなんかできる人が普通にいた。
2.登録されたすべての不具合を解決する文化がなかった。
日本だと、出荷前にはバグを0にして出荷するから、最後の数個はプロジェクトマネージャ権限で無理矢理Closeしたりrejectしたりするじゃない?
これに対して、そもそもバグを0にするという考え方が存在しなかった。バグトラッキングシステムには、常に無数のバグが放置されていた。
もちろん、担当レベルでたいていのバグは直していたし、致命的に困りそうな不具合はリーダーが割り振って修正していたけど、トータルで見ると、重要度の高い方からつぶしていって、納期が近づいてきたら、これくらいでいいかな?的な気分で製品が出荷されていく感じだった。
結果的に出荷した製品に不具合は残っていただろうけど、そのおかげで製品が売れなくなったという話は聞いたことがない。いくつかの機種は日本にも出荷したけど、普通に売れていた。

Q:テストエンジニアとか雇って採算あうの?
A:自分は1派遣エンジニアに過ぎなかったから、あの巨大なプロジェクトのコスト構造は分からない。でも何年もそれで回るのだから、コスト超過な状態ではなかったのだと思う。
日本の派遣会社に対するコスト要求はとても厳しかった。外資系で現場は英語がデフォルトだったから、テストエンジニアも普通のエンジニアも、インド人がいっぱい雇われていた。
日本国内で英語をしゃべるエンジニアといったら付加価値つけて高くなりそうなものだけど、インド人と価格競争を迫られるんだから、派遣会社はたまったもんじゃなかったと思う。
でも、現場に出るエンジニアにしてみたら、英語力はぐんぐん伸びるし、無茶をいわれない現場だったから、それはもう天国のようであった。

あと、世界規模で出荷してたから、必然的に予算も大きくなるよね、というのもあったのかも知れない。

sxchu_1251118.jpg
Q:なんでそんなおいしいところやめたの?
A:紅茶屋さんと同じ結論になるのがつまらないのだけれど、結局この職場も、巨大すぎて改善なんておいそれと出来ないという点では一緒なのです。
改善のための提案をすることは可能だし聞いてくれるんだけど、例えば何百万ステップもあるソースコードを何千のブランチに切ってアジアとヨーロッパからアクセスしても動き続けているシステムに対して改善なんて提案できるかという話で。
プロジェクト全体としては少しづつ改善が行われていたんだけど、それは自分のあずかり知らないずうっと上の方でいろんな事に目配りして検討した結果が降りてくるものであって、末端の自分は巨大なシステムの隅っこの歯車みたいな気分でした。歯車としてはとても恵まれた環境だったと思うんだけど。

で、幸せだけどなんだかつまんないよね、と思う一方で、いいめもをはじめとして、プライベートはいろいろ盛り上がっていった結果、やめることになりました。
今思えば、サーフィンが趣味でプログラミングが仕事みたいな人だったら、幸せに過ごせる職場だったんじゃないのかなぁ、と思います。
Q:僕その職場に行きたいから紹介して!
A:飲みに行った時に聞いてください。でも、派遣(請負w)ですから、自分がいた会社に今入ったからといってその現場に入れるかというと微妙だと思う。あと、同僚や上司と技術的なやりとりをできる程度の英語力が必須です。

ページビューの体感値’2010

photo by photogramma1

ページビューの体感値から一年以上たって、新しい情報も入ってきたので更新してみようと思いました。

前回同様、ググって出てきた数字を鵜呑みにしているので、アクセス数の数え方とか、調査時期によって数倍の誤差があり得ます。数年間全く更新されていない媒体資料ってどうなのよ、という気もするのですが、数字として参考になりそうなサイトなのでそのまま載せました。
数字をクリックすると情報元のサイトにリンクしています。中には、一日単位とか一年単位のPVもあったので、そういう時は30倍とか1/12にして換算させていただきました。

1万PV/月

大手ニュースサイトに取り上げてもらったり、はてなブックマークでホットエントリしたことがある、くらいのレベル。IT系のイベントに出た時にその話をすれば、「あぁ」って言ってもらえる。

「はてな流大規模データ処理」を見てきたホットエントリした昨年11月で、22000PV/月でした。
その後ここ数ヶ月は、5000PV/月くらいで落ち着いております。

あと、Gigazineさんで取り上げていただいたメイドめーるの最大アクセス数が26,000PV/月でした。

10万PV/月

「一応その分野では名前を聞いたことがある」くらいのサイト。でも、まだ単独で広告を取るのはむつかしいので、広告を出すとしてもアドセンスやアフィリエイト広告が中心。

100万PV/月

直接の広告申し込みが入るようになったり、営業かけて広告を取ってきたり出来るようになる。

1000万PV/月

1億PV/月

誰でも名前を知っているような企業からも広告を取ってくることが出来るかもしれない

100億PV/月以上

大手自動車メーカーなどの広告が(単独で)出る可能性がある

考察

  • だいぶ数字感覚ができてきて、100万PVがどれくらい遠いかが具体的に見えるようになってきました。今なら、「100万PV/月くらいアクセスがあるサービスならいろいろ支援もできる」という意味がよく分かります。
  • Yahooが36億→469億というのはいくら何でもおかしい。でも、アメブロが69億→120億であれば、おかしいのは去年の数字の方でしょうか。トップページだけの数字を見てしまった可能性が高いですね。
  • 広告代理店がある程度PVをまとめて出してくれていることに気づきました。例えばメディアレーダーのサイトで検索すると、新聞社とかmixiとかのPVを見ることが出来ます。

追記

2010-08-07 00:45:32

zapaさんからご指摘をいただいたので、最新のデータを反映しました。データを提供していただいたzapaさんに感謝します。
それにしても、ドラゴンクエスト9攻略Wiki、ページビューが1/10になるとは。攻略サイトは大変ですね。

四天王メーカー

.bbpBox{background:url(http://a3.twimg.com/profile_background_images/124251507/curesunshine.jpg) #9BE5E9;padding:20px;}

PETAZINE「GIGAZINEがやられたか…」まで書いてめんどくさくなってやめた。Mon Aug 02 02:30:24 via web


だめだだめだ、そこであきらめちゃダメだ!もっともっとがんばれよ!

でも、こんなの毎回つくるのはめんどくさそうなので、四天王メーカーをつくってみました。

四天王メーカー


↑自由に編集できるから、オチをつけてつぶやこう!
この結果をtwitterでつぶやく

google.load(“jquery”, “1.3.2”);
/* 汎用関数 */
//JavascriptInterpolator. Originaly from: http://blog.livedoor.jp/dankogai/archives/50665223.html
function Interpolator(open, close){
this.quotemeta = function(str){
return str.replace(/[^0-9A-Za-z_]/g, function(m){
return ‘\\’ + m;
});
};
this.regexp = new RegExp(this.quotemeta(open) + ‘((?:\n|.)+?)’ + this.quotemeta(close), ‘img’);
this.interpolate = function(str,item){
return str.replace(this.regexp, function(m0, m1){
var result = ”;
try{
var text = ‘item.’+m1;
result = eval(text);
}catch(e){
result = ‘[‘ + m1 + ‘:’ + e + ‘]’;
}
return result;
});
};
this.fill = this.interpolate;
}
if (typeof window.console != ‘object’){
window.console = {log:function(){},
debug:function(){},
info:function(){},
warn:function(){},
error:function(){}};
}

var Templater = function(template,output){
this.template = template;
this.output = output;
this.itp = new Interpolator(‘[‘, ‘]’);
};
Templater.prototype.update = function(value){
var str = this.itp.fill(this.template,value);
this.output.val(str);
};

var templater = null;
$(‘.value_input’).change(function(){
console.log(‘on_inputchange’);
var data = [];
data.hero = $(‘#hero’).val();
data.shitenno1 = $(‘#shitenno1’).val();
data.shitenno2 = $(‘#shitenno2’).val();
data.shitenno3 = $(‘#shitenno3’).val();
data.shitenno4 = $(‘#shitenno4’).val();
templater.update(data);
$(‘#output’).change();
});
$(‘#output’).change(function(){
console.log(‘on_outputchange’);
var link = ‘http://twitter.com/home?status=[status] [link]’;
var str = $(this).val();
link = link.replace(‘[status]’, encodeURIComponent(str.replace(/\t/g,”).replace(/\n/g,’ ‘)) );
link = link.replace(‘[link]’, encodeURIComponent(‘http://bit.ly/shitenno’) );
$(‘#tweet_link’).attr(‘href’,link);
});
$(document).ready(function(){
templater = new Templater( $(‘#template’).val().replace(/\t/g,”) , $(‘#output’) );
$(‘#output’).change();
});

2010-08-14 手で編集してオチをつけたのにtwitterのつぶやきに出てこないバグを修正しました。あと、せめて多少でも面白いようにオチをつけておきました。

JavaScriptで安易にAPIキーを使っちゃいけない

1267752_24260920.jpg

 具体的には、twitter公式短縮URLサービス、bitlyさんのAPIなんだけど。
このAPIを使うためには、bitlyにユーザー登録して、APIキーというのを取得します。で、そのユーザー名とAPIキーがあれば、

http://api.bit.ly/shorten?version=2.0.1&login=[ユーザー名]&apiKey=[API Key]&longUrl=[目的のURL]

というようなURLにアクセスすることで短縮URLを生成することが出来ます。

問題なのは、このAPIキーをJavaScriptでも使うことが想定されていることで。

JavaScriptで使うということは、ブラウザでソースを見たらユーザー名もAPIキーも丸わかりなのに、堂々と使っている方が結構おられます。

悪用シナリオ1

 被害者Aさんが、JavaScriptでbitlyAPIを使ったWEBページを開設していたとします。
スパム業者がやってきて、Aさんのページからユーザー名とAPIキーを拾います。
スパム業者は、このユーザー名とAPIキーを使ってスパムページへの短縮URLを生成して、スパムメールに貼り付けて送信しました。
数日すると、このURLはスパムメールであるという通報がbitlyに届くので、該当の短縮URLは凍結されます。
ついでに、スパム生成に使われたAさんのアカウントも凍結される可能性が高いですよね。悪くすると、Aさんはスパムメールの送信者と疑われてしまうかも知れません。

悪用シナリオ2

悪意のある第三者Bが、Aさんのページからユーザー名とAPIキーを拾います。
Bは、Aさんのユーザー名とAPIキーを使ってアダルトサイトの短縮URLを生成しました。
Bさんはこういう風に公表します。「あれ?Aさんこんなページも見てるんだぁ!やーい、エッチエッチ!」
Aさんにとって身に覚えのない話ではありますが、自分の生成履歴にある以上、なかなか説明の難しい立場に追い込まれてしまいました。

対策

 本来ならば、bitlyがAPIキーの仕様を変えて、登録されたドメイン以外からアクセスがあったらはじいてしまうようになっているべきだと思います。
googleMapsとかはそうなっています。

でも、公式フォーラムに出ている指摘を見ると、「そんなのいいじゃない、気になるならJavaScript以外から使えば?」と思う人もいらっしゃるみたいです。

上記のようなシナリオは困るよね、と思う方は、bit.lyのAPIをJavaScriptから直接使うのではなくて、PHPやRubyなどのサーバ側で動作する言語から使うことをオススメします。

[PHP]bitlyのAPIKeyを遮蔽する方法まとめ-RinGoonPOP!!

HootSuiteで非公式Retweet

ブラウザから使える多機能twitterクライアントhootsuiteがリニュアールされましたね。

WS003.JPG

以前から要望されていた公式retweet機能に対応したり、スキン変更が出来るようになったりしました。あと、UIが日本語対応したのも今回からだっけ。

一気にがらっと変えたので、ついて行けない人が続出しているように見えます。
この手のリニューアルは、大胆にやり過ぎるとユーザー離れのきっかけになるので怖いところですね。
ボクは、しばらくたったら慣れるんじゃないかと思っているのですが。

それはさておき、新UIになって公式retweetが標準になったので、以前みたいにコメントが書けなくて戸惑っている人がたくさんいる模様。以前使っていた非公式retweetが使えるようにする方法をまとめました。
WS000.JPG

左上のフクロウをクリックすると、いろいろメニューが出てきます。「設定-初期設定」を開いて

WS001.JPG

「Twitterの公式リツイート」のチェックを外すと、以前と同様の非公式retweetが出来るようになります。

あと、がんばって日本語訳した人には申し訳ないのですけど、ボクはなんだか変な日本語がとても気になるので、言語選択を「English」にして使っています。

「光の道」で劇的に改善される未来

hikari.jpg

はじめに

 孫正義さん×佐々木俊尚さんの『光の道』対談を見ました。孫さんのプレゼンは、本当に素晴らしかったと思います。
けれども、「でもやっぱり、日本のインターネットが回線だけで改善できるとは思えないよね」「規制改革とか、そういうのだって必要なんじゃないの?」といっている人がまだまだいるみたいです。

自分も、孫さんのプレゼンを見るまでは、「回線だけ引いたって仕方ないでしょ?」と思っていたのですけれど、プレゼンを見て考えが変わりました。『光の道』構想を孫さんのプレゼン通りに実現できたなら、それだけで世の中は十分大きく化ける可能性があります。

実は回線だけじゃない孫さんの提案

孫さんの提案を、家庭まで光回線を引くことだと思っている人が多いですけど、実は提案の中には、もっとすごい話が含まれています。

孫「宅内のアダプターには、Wi-Fiチップセットも入れる。うち壁からWi-Fiが吹いていて、公的サービスである電子教科書、電子カルテは無償で端末を渡し、通信代も無償。」 #hikari_road
posted at 20:24:45

wifi.jpg

光回線を家庭まで引いた時、家庭の壁部分では、光回線をLANケーブルに置き換える装置が必要になります。このアダプタに、ついでに無線LANの親機も搭載して、いろんな機器が無線LANでインターネットにつながるようにしようよ、ということです。

これってすごい話です。だって、これが実現すると、日本全国すべての家庭がインターネットにつながって、みんな同じ手順で機器をインターネットにつなぐことが出来るようになります。インターネット最大の問題と言ってもいい「そもそもつなぐのが難しい」という問題が一気に解決しちゃうのです。
孫さんの提案、「光の道」と言っていますけど、実は、すべての家庭にインターネットを引く提案なのです。

インターネットにつないでもらうための苦労

例えば任天堂は、Wiiをインターネットに接続してもらうために、専用サイトを用意しています。

wii.jpg

この画面、有線か無線を選ぶと、それぞれ3通りに説明が分岐して、かれこれ9パターン、ブロードバンドがない場合も入れると10パターン以上の説明に分岐しています。
今のように、家庭のインターネット環境がみんなばらばらだと、一つ一つのケースに場合分けして説明しないといけないから、どうがんばったって説明は難解になってしまうのです。

孫さんの提案が実現すると、この状況が一変します。例えばこんなふうになるでしょう(WPS規格を想定しています)。

  • Wiiのインターネット接続画面で「登録」を押します
  • 無線LAN親機の「登録」ボタンを押します
  • 「登録が完了しました」と出たら完了です!

インターネットにつなぐ手順は、日本全国共通、ボタン二回。どの家でも同じ手順でインターネットに接続することが出来ます。日本全国共通にするのだったら、ボタンのデザインも統一できますから、「壁についている赤いボタンを押します」というような、よりわかりやすい説明も出来るかもしれません。

全家庭共通インターネットが導くコンテンツ

もちろん、この簡単接続の恩恵はWiiに限りません。テレビもビデオも、デジタルフォトフレームも、みんな同じ手順でインターネットにつながるようになります。

すべての家庭に無線LAN接続があることが保証されると、今ある機器だけじゃなくて、もっと他の機器もインターネットにつながる可能性が出てきます。玄関のインターフォンは、今はまだ電線でつないでいますけど、家庭に無線LANがあることが保証できるのだったら、無線LAN接続に置き換えることが出来ます。親機と子機を直接つなぐ必要がなくなるので、今よりずっと取り付けが簡単になります。留守中に来客が来たら写真を携帯にメールしたりする機能もきっと搭載されるでしょう。
外出先から子供やペットの様子を見張るWEBカメラは、今でもそれなりに売れていますけど、接続方法が簡単になるので、もっともっと普及が期待できます。
携帯電話から操作できるビデオやエアコン、無限に写真の撮れるデジタルカメラ、うはぁ、夢ひろがりんぐ♪

まとめ

 電子カルテとか電子投票を実現するためには、法律も変えないと行けない、仕事のやり方も変えないと行けない、回線を引くだけじゃあダメで、もっとやらなきゃ行けないことがあるだろう、というのはまったくその通りです。
でも、上で書いたようなことは、そこまでしなくても、ただインターネット接続が簡単になるだけで実現できる話です。

留守中の来客は携帯電話に通知される。デジタルカメラで子供の写真を撮ったらおじいちゃんの家まで自動で届く。外出先から、携帯電話でエアコンをつけたり消したりできる。これだけ出来れば、十分夢の未来だと思うのですけど、いかがでしょう?

実践スクレイピング/第42回 Ruby/Rails勉強会@関西

今日は第42回Ruby/Rails勉強会@関西。「実践スクレイピング」というテーマで、電源検索サイトモバイラーズオアシスのデータを集めるために行ったスクレイピングについてお話しさせていただきました。

会場で教えていただいたこと。

  • IRB.conf[:ECHO] = nil でirbの応答がでないように設定可能
  • irb –noecho でも可

okkezさん、cyrossさん、ありがとうございます!

位置情報サイトのAndoroid対応まとめ

WMではGPSが効かないー とのお声をいただいたので、対応できるかな?と思って調べていたところ、なぜかモバイラーズオアシスがAndoroid携帯のブラウザでも動くようになりました。

Twitter/さきら:@mogya お、場所とれました。表示されました。便利です。

WindowsMobileでも動くようにしたいのですけど、安定してブラウザから位置情報を取得できる方法が見つかっていないので、今のところちょっと手が出せないでいます。

それはさておき。Andoroid端末に対応するために調べたページのまとめです。

エミュレーター

AndroidエミューレータでWebKitウェブブラウザを起動する手順:MediaTechnologyLabs(MTL):メディアテクノロジーラボ ブログ

を参考にインストールしました。

geolocation

AndroidのgeolocationでGPSを使う方法-冬通りに消え行く制服ガールは、夢物語にリアルを求めない。-subtech

にあるとおり、GoogleGearsが使えます。

Chromeなんかだと、何も考えずに google.gears.factory.create を呼び出せるのですが、Andoroidでは、
ResourcesandTools-GearsAPI-GoogleCodeにあるgears_init.jsをロードしてあげないと動かないので注意。最初これではまりました。

if(!navigator.geolocation) navigator.geolocation = google.gears.factory.create(‘beta.geolocation’);

っていうふうに書いておくと、 HTML5とgearsでコードを共有することができますね。

Andoroid携帯、手元にないので、どんなブラウザだと動くのかとか、全部の機種で動くのかとか自信がないです。モバイラーズオアシスにアクセスすると自動でAndoroid用ページにジャンプするはずなので、興味のある方は是非試してみて結果を教えてくださいませ。

html5 number inputで数字以外が入力できてしまう

HTML5になって、input要素にtype=”number”というのが指定できるようになる事になっていて。現行でも対応済みっぽい挙動を示すブラウザがいくつかあるんだけど、なんだか納得のいかない挙動。

↑100の後ろで、「a」とか押してみて?

opera.png←Opera9.8で試した結果
number inputというからには、数字以外を押しても無視される事を期待していたのだけれど、現に「a」って押したら「100a」になってしまう。

実験用HTMLファイル
test.html

上記で試した挙動は以下の通り。

  • Opera9.80:数字以外も入力できる。ただし、submitした時、数字以外が含まれていると、valueが空文字に置き換えられる。
  • Chrome4.1.249.1045:数字以外も入力できる。POSTもできてしまう。
  • FireFox3.6.2:数字以外も入力できる。POSTもできてしまう。
  • Safari4.0.5:数字以外も入力できる。POSTもできてしまう。

自分がなんか勘違いしてたりするかなぁ?

仕様見ると、「User agents must not allow the user to set the value to a string that is not a valid floating point number. (ユーザーエージェントは、ユーザーが妥当な浮動小数点数でない文字列をその値にセットできるようにしてはいけません。)」って書いてあるんだけど・・・

メイドさんのお引っ越しとそれに伴うおねぼうのおわび

photo by xtcbz

メイドめーるで、メイドさんから届くはずだった一部のメールが送信されていませんでした。ごめんなさい。具体的には、9時より前に届くはずだったすべてのメールが送信に失敗していました。現在この不具合は解消しているため、明日以降は正常に配信される予定です。

前回の遅延からずっと検討していた、サーバの移転を実施しました。これまで、自分が経営しているほとんどのサービスが一台のサーバに詰め込まれていたのですが、これにより、負荷やサービスの状況に応じて振り分けられるようになり、以前みたいに他のサービスの巻き添えになって落ちてしまう可能性がぐんと下がっています。

で、今朝は新しいサーバでの初めての動作だったのですが、設定が不十分で、ちゃんと動作していませんでした。ちゃんとテストできていなかったことをお詫びいたします。現在この不具合は解消しているため、明日以降は正常に配信される予定です。