タグ

ブックマーク / blog.mikage.to (20)

  • ErlangからMySQLにODBC接続する - みかログ

    telnet接続で計算問題を出題する (fujishinko 雑記帳) jquery history プラグインアップデート (みかログ) Logicool MX Revolution (RedWing's Blog) Erlang で memcached を作ってみました。 (DSAS開発者の部屋) [erlang]proc_lib で echoserver を書き直した (cooldaemonの備忘録) [security] PHPセキュリティ続き (Angelic Wing) [Erlang][Programming][Erlday][Comet][Yaws] Erlang for everyday use (3) (ZHlog) [Prog (ひおにっき) [Prog (ひおにっき) ErlangからPerlを使う (404 Blog Not Found) ErlangにはMyS

    ErlangからMySQLにODBC接続する - みかログ
  • jQueryサイト更新 - みかログ

  • Erlangのhttpドーピング - みかログ

    Erlangで書かれたWebサーバのyawsはかなり速い. Apache並の性能が出る. それはErlangが速いからだと思っていた. でも,ソースを読んでみたら,ドーピングされていることがわかった. 同様のアプリで,mochiwebというErlangで書かれたWebサーバのフレームワークもあるけれど,これも同じでその方法を使っていた. Erlangでは,TCP通信のドライバにいろいろなモードがあって,行単位で応答を返したり,FCGIやCORBAのパケットをあつかったりすることができる. Erlangのマニュアルには書かれていないけれど,このモードにhttpというものがあって,それを使うと,httpヘッダの解析などをC言語で書かれたドライバ内で行うことができる模様. undocumentedだけども,どちらのフレームワークも使用しているということは,その辺よく研究しているということなのかな

    Erlangのhttpドーピング - みかログ
  • マルチコアでスケールしないErlang その2 - みかログ

    telnet接続で計算問題を出題する (fujishinko 雑記帳) jquery history プラグインアップデート (みかログ) Logicool MX Revolution (RedWing's Blog) Erlang で memcached を作ってみました。 (DSAS開発者の部屋) [erlang]proc_lib で echoserver を書き直した (cooldaemonの備忘録) [security] PHPセキュリティ続き (Angelic Wing) [Erlang][Programming][Erlday][Comet][Yaws] Erlang for everyday use (3) (ZHlog) [Prog (ひおにっき) [Prog (ひおにっき) ErlangからPerlを使う (404 Blog Not Found) というわけでスケールし

    マルチコアでスケールしないErlang その2 - みかログ
    lizy
    lizy 2007/09/29
  • マルチコアでスケールしないErlangVM - みかログ

    マルチコア時代のErlang・・・のような書かれ方をしていることが多いけれども, 実際試してみるとそううまくスケールしてくれない. Erlang の ring benchmark を Squeak Smalltalk で の ring_bench を利用させていただいて,smp有無で測定をしてみると,こんな感じ. smpを使うと,速くなるどころか約1/7の性能しか出なくなってしまう. > erl -noshell -eval 'ring_bench:start(1000,10000), halt().' N = 1000, M = 10000; elapsed time = 1470 (1494) miliseconds > erl -smp -noshell -eval 'ring_bench:start(1000,10000), halt().' N = 1000, M = 10000

    マルチコアでスケールしないErlangVM - みかログ
    lizy
    lizy 2007/09/29
  • ErlangでOOP - みかログ

    WOOPER: Wrapper for OOP in Erlang というのがリリースされた模様. Erlangの1プロセスを1つのオブジェクトに対応させる方法で実装しているみたい. 実装自体は面白いけど,実際にこれでシステムを作るのは・・・さすがにオーバーヘッドが大きいように思う. Erlangのプロセスは非常に軽いけれども,1プロセスごとに327wordsを消費する. 32bitシステムなら1308bytes,64bitシステムなら2616bytes. オブジェクトのインスタンスを1個作るごとにこれだけメモリを消費してしまう. 小さなオブジェクトではなくて,大量に生成することがないような大きなオブジェクトに対してのみ使うのならありかも? まぁ,でもそこまで無理してOOPしたいかというと,わたしはそうは思わなかったり.(^^;

    ErlangでOOP - みかログ
  • Ajaxと戻るボタン・ブックマーク - みかログ

    サイトを普通にAjaxを使って作ると,ブラウザの戻るボタンが使えなくなったり,ブックマークができなくなってしまう. サイトの中の一部(たとえば商品情報)をAjaxで差し替えるようなケースでは,これが結構使い勝手を悪くしてしまう. location.hashを使ったセッション復元@最速インターフェース研究会 の記事をみて,location.hashでできそうなことを知ったけれど,どうもIEではうまく動かない. さらに色々調べてみると, Fixing the Back Button and Enabling Bookmarking for AJAX Apps というような情報を発見. IEの場合は,location.hashの代わりにiframeを使えばできる模様. ブラウザごとの挙動をまとめると

    Ajaxと戻るボタン・ブックマーク - みかログ
  • Erlangの世界ではmemcachedとか要らない - みかログ

    Erlangを始めてから感じたことは,今までPerlでやっていた時に比べて,いろいろなやり方が出来るようになる,ということ. Webアプリに限らず,いろいろなアプリケーションで,より柔軟な設計が出来るようになると思う. Perl(や同種のスクリプト言語では)基的に1プロセス1スレッドの範囲内に縛られていて,コストを考えるとコードの一部の処理だけ並列処理することは出来なかったし,複数のプロセスでデータを共有しようと思うと基的にはDBに入れるしかなかった. たとえば,Perlで作られている大規模なサイトでは,DBの負荷を軽減するためにmemcachedが使われていることが多い. もしErlangでサイトを作っていれば,memcachedなどをわざわざ使うまでもなく,同様のことが簡単に書けてしまう. 単にmemcachedと同じ事をするだけであれば大きなメリットは無いけれども,自前で書いた場

    Erlangの世界ではmemcachedとか要らない - みかログ
    lizy
    lizy 2007/07/08
    Erlangのプロセスを使えば、自前でいろいろできるので便利
  • 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でコンパ

    ErlangなWebサーバyawsを速くする方法 - みかログ
  • Erlang で静的解析チェックをする - みかログ

    Erlang R11B-5 から,dialyzer が強化されて,かなりのチェックが可能になった♪ 以前は型チェックと書いていたけれども,実際のところは,型チェックより幅広い範囲でチェック可能なため,静的解析と言う方が正しい感じなので,訂正. 普段の make 時に,必ず dialyzer も実行するようにすると,実行前にエラーを検出できて,デバッグ効率が上がると思う. Erlang Tips に静的解析によるチェックの項目を追加した. dialyzer による静的解析では,型チェックだけではなく,case の分岐に不要なものが混じっていないか,永久ループして抜けない関数がないか,などもチェックしてくれる. また,typer を使うと,各関数がどのような入出力をするのかが,簡単に確認可能. 複数のcase文でタプルを返すような場合,タプルが返される,というだけではなく,それぞれのcaseで

    Erlang で静的解析チェックをする - みかログ
    lizy
    lizy 2007/06/22
  • Erlangで行番号付きでエラーを出力する方法 - みかログ

    Erlangは,通常エラーが起きたときにスタックトレースを出してくれるのだけど,行番号の情報が含まれない. 少し長めの関数を書いていたりすると,関数の中のどこでエラーが出たのかなかなかわからないことがある. そこで,エラーが発生した行番号を出せないかと調べていたら,FAQにしっかり書いてあった. 5.19. ...find out which line my Erlang program crashed at? 以下のようにインストールしておくと便利だと思う. まず,smart_exceptionsからソースをダウンロード. ディレクトリ構造はそのままダウンロードしてくる. で,srcの中のファイルをコンパイルしてebinの中に入れておく. (Makefile自体はjungerlのサポートファイルが必要なので手作業でコンパイルした方が早いと思う) その後,smart_exceptions

    Erlangで行番号付きでエラーを出力する方法 - みかログ
  • ErlangでComet設置方法 - みかログ

    うまく動かないと問い合わせがあり,設置方法をちゃんと書いてないことに気づく. というわけで,試しに設置してみる方は,以下のように yaws を設定してください. ・index.yaws,chat_temp.html は yaws.conf の docroot で指定した場所の直下においてください. .yawsファイルはコンパイル等は不要です. ・chat.erl は,yaws.conf の ebin_dir で指定した 場所の直下において,そのディレクトリでコンパイルしてください. ebin_dir の中に,chat.beam ファイルが必要です. (コンパイル後,ソースは消しても大丈夫です) ・yaws.conf の runmod で, runmod=chat と指定してください. この指定をすると,ebin_dir の指定モジュールの start/0 が yaws 起動時に実行されます

    ErlangでComet設置方法 - みかログ
  • Erlangの+Aオプション - みかログ

    Erlangでは,+Aオプション付きで起動することで,async thread pool を作成し,ブロックするいくつかのオペレーションを別スレッドで処理することが出来る. デフォルトは0なので,通常は無効. 通常は非smpカーネルなら1つ,smpカーネルならCPUコアと同数のスケジューラスレッドが起動し,このスケジューラスレッドがErlangのコードを実行する. (-smp オプションをつけたときは,+S オプションでスケジューラスレッドの数を変更可能) で,ブロックするシステムコールを呼ぶと,スケジューラスレッドが応答待ちをしてしまうので,効率が悪くなってしまう. +A オプションを使って async thread pool を追加すると,このブロックしてしまう処理をasyncスレッドへ移動でき,スケジューラスレッドは別のErlangコードの実行を続けることが出来る. その結果,I/O

    Erlangの+Aオプション - みかログ
  • oregexp動いた - みかログ

    以前にoregexp動かない…と書いたが,その後動くようになった. 動かないと思っていたのは,テストコードだけだった模様. eunitという別のモジュールが必要だったらしい. eunitを見つけて入れてみたけど,やっぱりなんかうまくいかない. (めんどくさいので深追いはしていない…) とりあえずoregexp自体は正常に動作するのを確認できた. こんな感じで利用できる. 1> oregexp_svr:start(). {ok,<0.33.0>} 2> oregexp:match("http://www.mikage.to/test.html", "([\\w\\.]+)"). {match,1,4,[{0,"http"},{1,"http"}]} 3> oregexp:match("http://www.mikage.to/test.html", "\/\/([\\w\\.]+)"). {

    oregexp動いた - みかログ
  • Erlangは関数型だけど難しくない - みかログ

    Erlangで簡単なアプリまで書けるくらいになったので,感想を. 関数型言語というと,Lisp,Haskellなどがあって,どれも難しいイメージ. Erlangもはじめは結構覚えるの大変かなぁという印象があった. Lispは括弧だらけでまず見た目から拒否反応が起こる. HaskellはふつうのHaskellとか読んでみたけど,遅延評価やモナドがやはり難しいイメージ. 今までのように,書いた順番に実行されるという点が違ったり,デバッグするときに好きなときにprint入れたり出来ないのは,やっぱりかなり影響が大きい. ※追記:unsafePerformIOって関数で無理矢理printさせたりできるらしい.危険らしいけど(^^; その点,Erlangはそういう難しさが全くなかった. 書いた順番に普通に実行されるし,副作用がどうとか気にする必要も無し. エラー時は(見にくいけど)スタックトレースが

    Erlangは関数型だけど難しくない - みかログ
    lizy
    lizy 2007/05/09
  • http://blog.mikage.to/mika/2007/05/erlangcomet_5353.html

  • みかログ: ErlangでComet

    ErlangでCometしてみた. (iframe方式は結局だめそうなので,Cometに) Comet チャットサンプル 実装はきわめて手抜きです.あくまでサンプルとして. ソース: chat.erl (22行.etsテーブルの初期化) chat.yaws (72行.サーバ側の実装) index.html (52行.HTML+JS) ※別途jqueryが必要 こんだけ短いソースでも,ちゃんとCometできるし,C10Kにも対応できる.(問題はいろいろあるコードだけど) いろいろちゃんと実装したとしても,かなりシンプルに仕上がると思う. Comet の正しい使い方で紹介されているプログラミングモデルのどれにも当てはまらない新しい方式,といえるかも. Cometのために特殊な実装をする必要もないし,I/O多重化など実装がめんどくさい手法を使う必要もない. 普通に各リクエストの処理を書いて,新規

  • Programming Erlang 日本語訳 - みかログ

    telnet接続で計算問題を出題する (fujishinko 雑記帳) jquery history プラグインアップデート (みかログ) Logicool MX Revolution (RedWing's Blog) Erlang で memcached を作ってみました。 (DSAS開発者の部屋) [erlang]proc_lib で echoserver を書き直した (cooldaemonの備忘録) [security] PHPセキュリティ続き (Angelic Wing) [Erlang][Programming][Erlday][Comet][Yaws] Erlang for everyday use (3) (ZHlog) [Prog (ひおにっき) [Prog (ひおにっき) ErlangからPerlを使う (404 Blog Not Found)

    Programming Erlang 日本語訳 - みかログ
    lizy
    lizy 2007/05/03
  • チャットをCometより楽に実装する方法 - みかログ

    JavaScriptベースのチャットを作るとき,Cometを使うのが一般的とされているようだけど,もっと楽な方法でも良さそうに思える. Cometでは1回リクエストを受け取るたびにコネクションを切断しているので,Keep-aliveなどと併用しなければならない. 実際に都度TCP接続を張り直すとコストが大きいので,Keep-Aliveを併用したりする必要があるものの,それも色々裏技的な回避をしないとだめな模様. (Cometの正しい使い方を参照) でも,チャットを実装する上では,都度コネクションを切断する必要がなさそうに思える. iframeで別のページを読み込み,その中で script タグを使って親フレームを更新するだけではダメなのだろうか. この方法であれば, ・Cometのように,切断してから再接続するまでのタイムラグがないので,サーバ側の余計な処理が減る.(切断中に届いたメッセー

    チャットをCometより楽に実装する方法 - みかログ
  • ErlangとPerlの速度比較 その2 - みかログ

    ErlangとPerlの速度比較の文字コード変換部分に関して, Danさんからトラックバックをいただいたので再度測定してみた. そもそもはじめからUTF-8、それもutf8フラグがたっている文字列にfrom_toを使うのはばかげている。 とのことだけど,utf8フラグは立っていない想定. use utf8 は罠がいっぱいな割にメリットが少なく,普段は使用しないので・・・. (DBIが未対応だったり,モジュールによってフラグの扱いが違ったり(YAML::*とか)なので) また,多くの場合は,ファイルやソケット等からUTF8バイト列を受け取って,それを利用することになるので, utf8フラグ無しの文字列からの変換で比較する方が実際の利用状況からもフェアではないかと感じるけれども. (ただ,バイト列にしたとしても,やっぱりEncodeが一番速かった) そんなわけで,コードは以下のように修正. m

    ErlangとPerlの速度比較 その2 - みかログ
  • 1