タグ

ブックマーク / kazuhooku.hatenadiary.org (10)

  • Inline JSONPの長所について (続: サーバサイドからクライアントサイドのJavaScriptを呼び出す際のベストプラクティス) - kazuhoのメモ置き場

    サーバサイドからクライアントサイドのJavaScriptを呼び出す際のベストプラクティス - kazuhoのメモ置き場 の件、id:tokuhirom がさくっと HTML::CallJS というモジュールを書いて公開してくれた (Shipped HTML::CallJS - tokuhirom's blog 参照) ので、どういう Inline JSONP を使うとどういう形で書けるか、ぱっと例をあげたいと思います。 まず、サーバサイドのプログラム。 以下は perl で、tokuhirom の HTML::CallJS と Text::MicroTemplate を使っている例。 JavaScript の呼出を保存する配列を用意し、そこに呼出をどんどん追加していっています。一定条件下でのみ特定のクライアントサイド処理を呼び出したり、配列の各要素について呼び出したりすることも簡単にできま

    Inline JSONPの長所について (続: サーバサイドからクライアントサイドのJavaScriptを呼び出す際のベストプラクティス) - kazuhoのメモ置き場
  • ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない - kazuhoのメモ置き場

    タイトルは煽り入ってますが。 仮に動的ページを生成するのにかかる時間が1秒、そのうちデータベースやmemcached等リモートサーバへの問い合わせ時間を除くいたCPUの処理時間が0.1秒とする。また、ピークのリクエスト処理量は、平均の2倍とする。 そうすると、クアッドコアのアプリケーションサーバで処理できるリクエストは、 4 core * 10 reqs/sec * 86,400 sec/day * 30 day/mon / 2 = 51,840,000 reqs/mon と、約5,000万PV/月を1台で捌けることになる。 CPUが動いている時間は全処理時間の10倍と仮定したわけだから、アプリケーションサーバの最大同時接続数は 4 core * 10 = 40 程度あればいいことになる。実際には、安全係数を2倍かけて 80 とか。リクエストの処理に必要なメモリ量を 100MB とすると、

    ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない - kazuhoのメモ置き場
    cubed-l
    cubed-l 2009/12/27
    CPUのパフォーマンスを活かして仮想化が進んでいるかな
  • 自作って得なのかなと思って計算してみた (自作サーバカンファレンス感想) - kazuhoのメモ置き場

    一昨日、自作サーバカンファレンスに参加してきました。とてもおもしろく色々刺激をうけました。はてなの田中さん楽天の方々始め、スピーカーの皆さんありがとうございました。ただ分からなかったのは、サーバを自作する必然性がどの程度あるのかな、という点でした。 確かに、発表者の方々が構築されているような、1CPU, 8GBメモリのような構成では、自作サーバには(少なくとも原価ベースでは)価格競争力があるようです。はてなさんは Core 2 Quad + 8GBメモリ + X25-M (SSD) で10万円という目安を提示してらっしゃいましたが、同等の構成をベンダーから購入するとなると、1.5〜2倍の価格になるのかな、と思います。例えばDELLのオンライン価格*1は以下のようになっています*2。 DELL PowerEdge R200 - \145,900- Xeon X3330 (2.66GHz, Q

    自作って得なのかなと思って計算してみた (自作サーバカンファレンス感想) - kazuhoのメモ置き場
  • HTTPプロトコルパーサのオーバーヘッドは18%以下という話 - kazuhoのメモ置き場

    「テキストプロトコルは遅くないよ」という話 - kazuhoのメモ置き場に関するの具体的な話。 Kazuho@Cybozu Labs: 「サーバ書くなら epoll 使うべき」は、今でも正しいのかを書く際に自作したベンチマークツールがあるのですが、それを使ったベンチマーク結果をid:tokuhiromがhttp://d.hatena.ne.jp/tokuhirom/20091001/1254355956にまとめてくれている*1。それについて、ちょっと補足と実測値を。 まず、コメントにも書いたんだけど、サーバのスループットを測る際にはTCP接続を多重化する必要があるので、-a 100 -n 100 -f *2のようなオプションでベンチマークをとってください。あと、ローカルホスト上での測定か、ホスト間での測定か、によっても当然結果は変わる。 自分の環境 (linux 2.6.18-028sta

    HTTPプロトコルパーサのオーバーヘッドは18%以下という話 - kazuhoのメモ置き場
  • C/C++に文字エンコーディングバリデーション機能がないって、ほんと? - kazuhoのメモ置き場

    通りすがり (2009-09-16 18:09) > PHP以外の言語は「(略)」のに対し ここに挙げられている言語がWebアプリで使われる全ての言語ではない。 例えば、CやC++にはない。付け足せば、PHPPerlなどのCモジュール内部で起こった不正な文字はスルーされうる。 よって、「PerlJava、.NETRubyPHPの中では」と書けば筋は通るが、「PHP以外では」は誤り。 そしてそんなことを、PHPの(脆弱性撲滅に注力している)開発者に言ったら、喧嘩を売られたと受け止められて当然。 PHP以外では: 既にあたり前になりつつある文字エンコーディングバリデーション - 徳丸浩の日記(2009-09-14) というコメントが気になった。 C言語にある文字コード変換機能って言ったら mbtowc だと思うけど、mbtowc は無効なバイト列を受け取ると EILSEQ を返すことに

    C/C++に文字エンコーディングバリデーション機能がないって、ほんと? - kazuhoのメモ置き場
  • 「ループは -1 まで回せ」 - kazuhoのメモ置き場

    元の話題は int vs size_t problem のあたり。符号なし型の減算ループをどう書くかという話。 実は、一定数までカウントアップするよりも 0 を通り過ぎるまでカウントダウンする方が速度とコードサイズの両面で良い、ってのは最適化の定石だと思ってました。特にアセンブリレベルでは。 自分が使ってた 68000 だと、ずばり、「レジスタの値をデクリメントして -1 じゃなければジャンプ」という DBRA 命令がある (しかも速い) し、x86 でも、 loop: ... subl $1, %esi jns loopみたいな形で、カウンタが符号なし型であっても高速なループが書けるんじゃないかと。 でもそういえば Metrowerks のコンパイラはこの最適化をしてくれなかったような気がするけど GCC (4.0.1 (Apple Inc. build 5465)) だとどうなんだろと

    「ループは -1 まで回せ」 - kazuhoのメモ置き場
  • MySQL+Java でサーバサイドプリペアードステートメントを使うべきで「ない」理由 - kazuhoのメモ置き場

    useServerPrepStmtsのここの説明ではデフォルトがtrueになっているが、これは上述の通り嘘である。 (中略) そしてなぜfalseにされたかということの背景を察すると、trueにすることの弊害もありそうで、手放しでこれをtrueにすることを勧めることが少しはばかられる。 http://www.geminium.com/chiba_blog/2008/12/23/33/ 自分は Java 使ってないですが、MySQL の中の人が使うなって言ってます *1。その理由はメモリリークのような症状が出る可能性があるから。 So why are prepared statements a problem? Because users do not clean up/close unused prepared statements. Multiply the number of prep

    MySQL+Java でサーバサイドプリペアードステートメントを使うべきで「ない」理由 - kazuhoのメモ置き場
  • Q. 1GB の文字列を strlen するのに必要な時間は? - id:kazuhookuのメモ置き場

    1GB の文字列を strlen するのに必要な時間は何秒でしょう? こういったものをぱっと予測できることは、最適化に取り組む上で必要かなぁ、と思ったので、自分の理解が正しいか確認するためにも、実測してみました。 (以下、白地に白文字で書いてあるので、選択して読んでください) 手元の Linux (Pentium 4 @ 3GHz / DDR2-667) では、約 0.48 秒 (2.1GB/sec)。GCC の組み込み程度の strlen では、ボトルネックはメインメモリの帯域あるいはレイテンシではなく、CPU になります。 一方、SSE で記述された strlen *1 を使用すると 0.26 秒 (3.9GB/sec)。こちらはメモリ帯域がボトルネックになっているようで、手元の MacBook (Core 2 Duo @ 2GHz / DDR2-667) でも、ほとんど同じ数値になり

    Q. 1GB の文字列を strlen するのに必要な時間は? - id:kazuhookuのメモ置き場
  • BASIC 認証でログアウトを可能にする方法 - kazuhoのメモ置き場

    Cookie でログイン状態を管理すればいいんじゃいのかな。 まず、ログインボタンを押した時「だけ」is_logged_on を真にする。 HTTP/1.1 Authorization Required Set-Cookie: is_logged_on=1 WWW-Authenticate: Basic realm="Hoge123456" ...サーバ側では、Basic 認証のパスワードがあり、かつ、is_logged_on の値が真であることをチェックすればいい。 GET / HTTP/1.1 Cookie: is_logged_on=1 Authorization: Basic ... ... HTTP/1.1 200 OK ...で、ログアウトの際には、Cookie を消す。 HTTP/1.1 200 OK Set-Cookie: is_logged_on=0 ...そして、is_

    BASIC 認証でログアウトを可能にする方法 - kazuhoのメモ置き場
    cubed-l
    cubed-l 2008/07/12
  • Dynamic DNS を使って SSH アクセスを制限する方法 - kazuhoのメモ置き場

    いつでもどこからでもサーバにログインしたくなるときってありますよね。かといって、サーバの sshd への接続を全世界から可能にしておくというのは、たとえパスワード認証を無効化していても避けたいところ。 今までは自宅が事実上固定アドレスだったので、クライアントの IP アドレスによるフィルタリングで問題なかったんだけど、引越後は IP アドレスがコロコロ変わるようになるので、そのままだと対応できない。なのでちょっと頭をひねってみた。こんな感じ。 SSH ポートについては、 iptables 等パケットフィルタによるアクセス制限を行わない sshd も対応している hosts_access を使って、ホスト名の「正引き」による制限を行う モバイル環境に Dynamic DNS のクライアントをインストールして、正引きのマッピングを自動更新 具体的には、以下のような感じで設定した。 % cron

    Dynamic DNS を使って SSH アクセスを制限する方法 - kazuhoのメモ置き場
    cubed-l
    cubed-l 2008/05/02
  • 1