« June 2007 | Main | September 2007 »

Monday, July 23, 2007

ErlangでOOP

WOOPER: Wrapper for OOP in Erlang

というのがリリースされた模様.

Erlangの1プロセスを1つのオブジェクトに対応させる方法で実装しているみたい.
実装自体は面白いけど,実際にこれでシステムを作るのは・・・さすがにオーバーヘッドが大きいように思う.

Erlangのプロセスは非常に軽いけれども,1プロセスごとに327wordsを消費する.
32bitシステムなら1308bytes,64bitシステムなら2616bytes.
オブジェクトのインスタンスを1個作るごとにこれだけメモリを消費してしまう.

小さなオブジェクトではなくて,大量に生成することがないような大きなオブジェクトに対してのみ使うのならありかも?
まぁ,でもそこまで無理してOOPしたいかというと,わたしはそうは思わなかったり.(^^;

| | Comments (0) | TrackBack (0)

Friday, July 13, 2007

パスワードを書いて保存!禁じ手を可能にする最終兵器

@Nifty通信より


パスワードを書いて保存!禁じ手を可能にする最終兵器があった?

セキュリティ上、「安易なもの」や「想像されやすいもの」は避けたいパスワード。加えて、パスワードの数が増えてくると管理も大変ですよね。

パスワードを忘れないように、パスワードが書かれたメモをパソコンの画面に貼っている方はいませんか?これはとても危険、玄関ノブに鍵をぶらさげているようなものですよ。

それでも書いて残しておきたいという方には、こんな秘密兵器?もあるようです。ただし、パスワードはとても大事なものです。絶対に他人に漏れないようにご注意ください!

秘密兵器?シークレットペン

ID Managerみたいなソフトウェアでも紹介するのかな?と思ってリンク先をみてびっくり.

アリエナイ.

こんなんにパスワードを書いて保存させようとしているのか.危険すぎ.

玄関横の植木のかげに鍵を置いておくようなものです.
少し探せば(調べれば)わかるでしょうに・・・

他人に漏れる方法を案内しておいて「絶対に他人に漏れないようにご注意ください!」というのも変.
責任回避の文言?

こうやってPC初心者に誤った知識が広がっていくのかな・・・

| | Comments (0) | TrackBack (0)

Thursday, July 05, 2007

jQuery 1.1.3.1リリース

重要なバグFIXがあったのかな?
1.1.3の人はアップデートした方が良いようです.

jQuery 1.1.3.1 リリース

| | Comments (0) | TrackBack (0)

Wednesday, July 04, 2007

ErlangなWebサーバyawsを速くする方法

Erlangで書かれたyawsがある.
一般的なWebサーバの機能の他,HTMLにErlangで書かれたコードを埋め込んで動的に処理させることが出来るようになっている.(JSPやPHPのように)

このWebサーバは,サーバのコードがほぼすべてErlangで書かれているのだけども,十分な処理速度を持っている.
Erlangベースということで,接続数に対しても十分スケールするので,動的コンテンツの環境としてはなかなか優秀.
しかし,デフォルトでは Erlang VM をそのままの状態で利用するため,最近のSMP・マルチコア環境では性能を十分発揮できない.

以下の2つのことをすれば,それだけでかなり性能を上げることが出来る.
1.SMP・マルチコア環境では,yaws を実行する Erlang 環境に,-smp オプションを渡す(-erlarg '-smp')
2.yaws本体を,HiPEでコンパイルし直す(+nativeオプション付きでコンパイル)


実際にどの程度優秀なのか,上記を試しつつ,簡単にベンチマークを取ってみた.

環境は,SuSE Linux 9.2,Xeon 3.0GHz (Cache 2M) HyperThreading × 2,メモリ4GB.
別のマシンから,Apache1.3付属の ab を使って,並列度を 1, 10, 100 と変えながら測定を行った.
結果の数値はすべて req/sec.従って数が大きいほど優秀.


静的コンテンツ(1406bytesの画像 /favicon.ico)

並列標準対策1対策1+2Apache1.3
並列 11270.651326.261278.77961.54
並列 102066.121924.193232.063167.56
並列 1002039.362421.013161.223338.53


次は,簡単な内容を表示する arg2.yaws でベンチを取ってみた.
Apache1.3の方は,環境変数をテキストですべて表示するスクリプトをPerlで書いて,FastCGIで実行するようにしてみた.
(処理内容は異なるので,あくまで参考程度ということで)

動的コンテンツ(軽い処理 /arg2.yaws)

並列標準対策1対策1+2Apache1.3
並列 1776.40793.021062.70615.01
並列 10918.192243.163571.431846.04
並列 100820.652464.883347.841857.36


次は重たいトップページ.
対策を取ってもかなり遅いです.
おそらく,ファイルを遅い方法でアクセスしているため.
Erlangのファイルアクセスは,標準だとローカルのファイルを直接見に行くのではなく,ファイルを管理するサーバプロセスを経由してアクセスするために,そのオーバーヘッドがかなりかかっているのではないかと思う.
ローカルのファイルであることを前提に,高速に処理するオプションを指定すれば,速くなるはず….(試していない)

動的コンテンツ(重い処理 /)

並列標準対策1対策1+2
並列 127.0124.5743.75
並列 1026.9365.3096.45
並列 10025.5858.8090.05



具体的な対策の方法は以下の通り

1.SMP・マルチコア環境では,yaws を実行する Erlang 環境に,-smp オプションを渡す(-erlarg '-smp')
yaws --erlarg '-smp' --daemon
のように,yaws起動時に -smp オプションを渡します.

2.yaws本体を,HiPEでコンパイルし直す(+nativeオプション付きでコンパイル)

yaws の src/Makefile の ERLC_FLAGS の行を以下のように変更
ERLC_FLAGS+=-W $(DEBUG_FLAGS) -pa ../../yaws -smp +native
この修正を行ってから,make すればOKです.
実行時は1の対策も同時に行う必要があります.

2の対策のみ行う場合は,-smp オプションを削ってください.
(nativeコンパイル時の-smp有無と,実行時の-smp有無は一致していないと,nativeコンパイル結果が利用されないため)

| | Comments (0) | TrackBack (0)

Monday, July 02, 2007

jQuery 1.1.3 リリース♪

jQuery 1.1.3 がリリースされた.
jQuery 1.1.3: 800%+ Faster, still 20KB

スピード向上はとてもうれしいけど,それだけじゃなくてセレクタの強化も便利そう.

$("div.台北")

みたいなユニコード対応も便利になったし

$("div#foo\.bar")

のエスケープ対応は,既に書いたHTMLに対してjQueryを使うときに便利そう.
(今まではHTML側を直さなきゃならなくて不便だった(^^;)

極めつけは

$("div:nth-child(2n)")
$("div:nth-child(2n+1)")

がすごい.表をしましま模様にするのとか簡単に書けそう.

| | Comments (0) | TrackBack (0)

Erlangの世界ではmemcachedとか要らない

Erlangを始めてから感じたことは,今までPerlでやっていた時に比べて,いろいろなやり方が出来るようになる,ということ.
Webアプリに限らず,いろいろなアプリケーションで,より柔軟な設計が出来るようになると思う.


Perl(や同種のスクリプト言語では)基本的に1プロセス1スレッドの範囲内に縛られていて,コストを考えるとコードの一部の処理だけ並列処理することは出来なかったし,複数のプロセスでデータを共有しようと思うと基本的にはDBに入れるしかなかった.

たとえば,Perlで作られている大規模なサイトでは,DBの負荷を軽減するためにmemcachedが使われていることが多い.
もしErlangでサイトを作っていれば,memcachedなどをわざわざ使うまでもなく,同様のことが簡単に書けてしまう.

単にmemcachedと同じ事をするだけであれば大きなメリットは無いけれども,自前で書いた場合は仕様を簡単に変えられる.
たとえば,
・ワイルドカード指定でデータを消したい
・複数のデータの更新をatomicに行いたい
・複数台に分散するときの分散アルゴリズムを自前のものに差し替えたい
・キーの長さが250文字じゃ足りない
・2次元もしくは多次元のデータを入れて,行単位・列単位などでキャッシュデータを削除したい
なんて事をやりたくなったとき,自前で用意していれば容易に実装することが出来る.

ちなみに,非常に単純な場合,以下のようなコードで可能.

サーバ側:
start() ->
  proc_lib:start(?MODULE, memcache_start, []),
  ok.

memcache_start() ->
  global:register_name(memcache, self()),
  proc_lib:init_ack(ok),
  memcache_process().

memcache_process() ->
  receive
    {get, From, Key} ->
      From ! get(Key),
      memcache_process();
    {put, Key, Val} ->
      put(Key, Val),
      memcache_process();
    {shutdown} ->  % 終了用
      ok
  end.

クライアント側:
init() ->
  io:format("ping. ~w~n", [net_adm:ping('server@ipaddress')]),
  global:sync(),
  % すぐにglobalnameが反映されないので,
  % pingしたあとsyncしてから利用する
  io:format("register ~w~n", [global:registered_names()]).

write() ->
  global:send(memcache, {put, N, <<"DATA">>}).

read() ->
  global:send(memcache, {get, self(), N}),
  receive
    _Any ->
      ok
  end.

ちょっとテストした限りでは,性能もそれなりに出る模様.
(とりあえずPerlからmemcachedを呼び出したら,Perl側がボトルネックになってmemcached側にたいした負荷をかけられなかったので,詳しい測定は諦めた)

上のErlangのサンプルコードでは,キーは任意のデータ構造が使えるので,文字列だけじゃなく,{RowID, ColumnID} とか {CommunityID, ThreadID, ArticleID} みたいな構造でもOK.長さの制限も特になし.
これだけでも結構魅力的なのではないかと思う.


memcachedは一例だけれども,これ以外にも,たとえばレスポンスタイムを速くしたいために,処理の一部(たとえばアクセスログの記録)を別プロセスで非同期に行うようにするとか,今まで言語の仕様で縛られて出来なかったことが,Erlangだと色々出来る.
Erlangで書いていたら,こう出来たのに…という風に最近考えてしまうことが多い.

Webで使おうとすると,日本語対応のフレームワークとかが無いようなので,その辺が難しいところだけども...

| | Comments (0) | TrackBack (1)

Sunday, July 01, 2007

PHPのセキュリティ

[security] 1) 例えば、Webサイトに書かれている事を鵜呑みにしないより

より良いWebアプリケーション設計のヒント 1) 例えば、PHPを避ける 短時日で素早くサイトを立ち上げることのみに着目するのであれば、PHPは悪い処理系ではない。しかし、これまで多くの脆弱性を生んできた経緯があり、改善が進んでいるとはいえまだ十分堅固とは言えない。

takesakoさんから聞いたネタなんだけど、アフォか(一刀両断
Javaや.Netや他のLLを使ったところで実装者の知識が足りなければ簡単にセキュリティホールは発生します。
逆に、「PHPだから短時間で素早くサイトを作れる」わけじゃありません。
素早くサイトを立ち上げること「のみ」に着目して作るからセキュリティホール作ってるんじゃないかと。

このサイトを見ている人がこういった妄言に振り回されないことを切実に願います。

元記事にはいろいろつっこみどころはあると思うけど,PHPのセキュリティが弱いのは事実じゃないのかな.

知識のある人がちゃんとコードを書いた場合でも,PHP言語自体に脆弱性が見つかる事が多いので,PHPの方がセキュリティ上のリスクは大きいと言えるのではないかと.
この記事では,セキュリティの知識を得た上で作っても,(過去の脆弱性の発生状況から見て)PHPを使うとリスクが高い,と言っているだけだと思う.

素早くサイトを立ち上げる場合は,JavaよりはPHPの方が適しているのは事実だと思うし,素早く立ち上げようとしている人はセキュリティに関する知識がないと仮定するのもいささか乱暴かと...

なぜPHP本体にバグが多いのか?


PHP開発者の意識
すべてのメモリ関連問題,すべてのクラッシュは,セキュリティ上の問題となる可能性があり修正されるべき問題として対処しなければならない,と筆者は考えています。自分が攻撃コードを考案できなくても,ほかの人は攻撃コードを考案できるかも知れません。一つ一つは軽微な問題でも組み合わせて利用して重大なセキュリティ問題が発生したりします。互換性・拡張性を犠牲にしてでもセキュリティ上の問題を適切に解決しなければなりません。しかし,残念ながらPHPの開発者には同じ考えを持たない開発者もいます。昨年PHPソースコード監査の第一人者であるStefan Esser氏がPHPセキュリティレスポンスチームを去ったのは,PHP開発者のセキュリティ意識に失望したためです。

なんて書かれている事からも,セキュリティに対する配慮が微妙なのではないかと思えるし.
(この辺は最近改善しているのかもしれないけども)

| | Comments (1) | TrackBack (1)

フォークスソウル

クリアした♪面白かった☆

アクション系は割と苦手なので,大抵こういうのはパスするんだけども,体験版が割と簡単だったので,購入してみた.
実際,アクション部分が結構やさしめで,苦手なわたしでも普通にクリアできた.
(GENJIは途中から難しくて先に進めなくなったくらい苦手)

敵の攻撃の前には必ず特定の動作(?)みたいなのがあって,それを上手く見れば確実に避けれるところが良い.
敵に囲まれたりすると,どうしようもなくなるけど(^^;
レベル上げも飽きるほど大変というわけでもなく,ある程度やればそれなりに強くなるし.

エレン編の龍(?)のところはかなり苦戦した&無限回廊あたりからは攻略みながらだけど(^^;
ラスボスも一発でクリアできたし,わたしには難易度がちょうど良い感じだった.

本編は面白かったけど,ダンジョントライアルはかなり微妙な感じ.
異界と同じようなフィールドを作れればいいんだけど,単調な通路と部屋しか置けないのが・・・

そのうちオンラインでクエストダウンロードできるようになるみたいなので,そっちに期待かな.

FolksSoul -失われた伝承-

発売日2007/06/21

| | Comments (0) | TrackBack (0)

« June 2007 | Main | September 2007 »