2008-01-01から1年間の記事一覧

MessagePack RPC フレームワークの設計案

プロトコルにMessagePackを、IO戦略にmp::iothreadsを使ったRPCフレームワークの設計案。RPCのメソッドと、それに対応するコールバック関数の関連づけをリンク時に行う。google-gflagsと同じ戦略。 プロトコルは以下の3種類: Request [true, メソッドID, 引…

pthread_mutexはプロセスを越える

futex(2) を使ってせっせとmutexとconditionを実装していたら、意外なところに盲点が。 Linux では pthread_mutex と pthread_cond がプロセスを越えられる。移植性は無いようで、Mac OS Xでは動かなかった。 やり方は mmap(2) に MAP_SHARED フラグを渡して…

サイズによるmalloc(3)の負荷の違い

ネットワークIOのバッファリングを行うコードを書く必要があったので、確保するメモリのサイズによってmalloc(3)にかかる時間がどれくらい違うのか調べてみた。 環境は: Linux vcore.local 2.6.22.9-vcore16 #1 SMP Sun Oct 14 22:13:32 JST 2007 x86_64 AM…

MessagePackでIDLを書く

MessagePackでプロトコルを定義する。言わばIDLを書く機能。 #include <msgpack.hpp> // プロトコル定義とか namespace protocol { using msgpack::define; using namespace msgpack::type; // msgpack::define<T>を継承する。 // - msgpack::object型から直接型変換できる /</t></msgpack.hpp>…

memcachedのストレージにSSDを使うアイディア

memcached Night in Tokyo #1によれば、mixiはmemcachedサーバーを135台使っているらしい。多い! 話に依れば一番最初に足りなくなるのはメモリの容量(3GBほど割り当てられている)で、ネットワークやCPUはボトルネックになっていないらしい。 ではメモリの…

高性能サーバーの実装を一般化するアーキテクチャ

ある日のTwitter。途中でネットワーク分散に話がそれるけども、基本的に1つのプログラムの中の話。 高速サーバーの実装を一般化するアーキテクチャ:入力+ディスパッチ・ロジック・出力 の各ステートにそれぞれスレッドプールを割り当てる。各ステートは非…

ネットワークIOについて

ある日のtwitter。 write()のエラーをコールバックする必要があるのかどうか。write()が失敗するのはカーネル内の出力バッファへのコピーが拒否されたときで、送信エラーが発生したときではないわけで。 実際に送信エラーが発生すれば、今度はread()が失敗す…

Twitterの発言をブログに載せる

Twitter検索の検索結果を宜しく整形するRubyスクリプト。要Ruby & Hpricot。 require 'rubygems' require 'hpricot' require 'open-uri' require 'cgi' if ARGV.empty? puts "Usage: #{$0} <keyword>" exit 1 end keyword = ARGV.join(" ") stream = OpenURI.open_uri</keyword>…

gcc拡張関数型言語C

Cって関数型言語だったんだ。型推論もサポートとしたモダン言語だったんだね。 #include <stdio.h> int main(int argc, char** argv) { ({typeof( ({typeof(0) x = 0; printf("argv[$d] = %s\n", argv[x]); argv[x];}) ) s; ({typeof(0) x = 0; if(x < argc) while(tr</stdio.h>…

Webユーザーストレージ基盤

今日のTwitterより。 Webサービス提供者がユーザーの情報を抱え込んで道連れにしてしまうのはいかがなものか。ユーザーは自分の情報は自分で管理し、Webサービスに対して貸し出すようにすればいい。極端に言えばブログサービスはテキスト→HTMLの成形ツールで…

Skype的ログ持ち回りチャットシステムのアイディア

サーバーが楽するチャットシステム。 モチベーション: Lingr重いす でもブラウザで使えるのは良い。Skypeとかは専用クライアントが必要 Skypeは軽い 軽くてブラウザで使えるチャットがあると良いな 実装できるなら実装すればいいんじゃないか 実装の方針: …

簡易分散ストレージを実装してみた

Cagraの開発に全然参加できていなくてヘコみつつある今日この頃。発作的に簡易分散ストレージを実装してみた。 server.rb client.rb server.rb require 'socket' require 'thread' require 'rubygems' require 'json' class Server def initialize(srv) @srv…

MXMLテンプレートエンジン

って無いなぁ。必要ないのか。

Flashサイトに残された問題

Flashは検索エンジンに引っかからない ページがPermalinkにならない エフェクトがウザイように見える ロードが重いように見える 検索エンジンに引っかからないのは困る。検索できなければインターネットに存在しないも同然なわけで。 検索エンジンの改善を待…

Partty!.orgでやりたいこと

セッションメッセージを後で変える セッション名の横に(括弧)で表示されるメッセージを、後で変えられるようにする。今この手のメタデータはファイルベースで管理していてイケてないので、DBで管理するようにしたい。 が、普通にリレーショナルデータベー…

Partty!.orgのバグ

partty.orgコマンドを終了してもActiveSessionになったままになることがある。サーバー側のプロセスが終了しない。 普通にバグ。原因不明。誰か直してー! Linux版Flash PlayerだとFlexターミナルの文字が等幅フォントで表示されなくて、ひどいことになる。 …

AIRのadlが実行できない

小一時間ほど悩んでる。 $ adl helloWorld-app.xml unknown error Error: Error #2014: Feature is not available at this time. at runtime::SecurityManager$/initAppDataDirRoot() at runtime::SecurityManager$/GetPersistentStorageDirectoryName() at …

XMLSocket + JavaScriptってどうなんだろう

http://labs.unoh.net/2007/08/flash_asynchronous_flash_xmlso.html (select(2)ということは、クライアントがsizeof(fd_set)*8台以上同時に接続してきたらサービス不能になるんだろうか)Flash - JavaScript Bridgeを使って、通信だけFlexにやらせて、後は…

RubyのクロスプラットフォームGUIライブラリ

Shoes。GTKでCario + Pangoをバックエンドに使っている。 これはいいかもしれない。http://www.infoq.com/jp/news/2007/09/ruby-shoes http://code.whytheluckystiff.net/shoes/

HTTPServiceでByteArray

FlexのHTTPServiceでByteArrayをもらう方法がわからない。SocketでHTTPをしゃべるのは何か違う気がする。違うに違いない。 ※解決 URLLoader + URLRequestを使えばいい。

Flexの落とし穴

どやらいっぱいあるらしい。 SocketにwriteBytesしたらflush()しないといけない ただしOSによって挙動が異なる。Mac OS X、Linuxの場合はSocket#flush()しなくてもデータが送られるが、Windowsでは送られない。なので必ずflush()する。 wmode=transparentに…

先が見えないのが面白い

何になるか分からない、どうなるか分からない、どうやればいいのかも分からない。だから面白い。 先が見えると面白くなくなってしまう理由は、いろいろある。 試行錯誤する余地が無くなる 実用性を考えてしまう 見えてしまった「先」が、あまりに遠い 試行錯…

レガシー

テキストベースのコミュニケーションツールは、レガシーなモノが多い。カタカナだが枯れている。 Ajax + CometでIRCとかどーなんでしょ。代わりがないと言うことか。代わりが必要ないと言うことか。

非同期IRCのアイディア

ニコニコ動画みたいな、同期っぽく見える非同期なチャットをIRCで。IRCサーバーはチャットのログを全部取っていて、任意の時刻からログを再生できるようになっている。さらに、任意の時刻に発言を挿入できるようになっている。クライアントは、ログインする…

FlexでターミナルのUI

そろそろUI周りを。Flexはこのあたりを簡単に始められるのが嬉しい。タブとか。 その前にAPIを設定しないといけないかな。それからcrossdomain.xml。追々。

Flexでターミナルのマルチバイトの件

入力(Telnet) --> デコーダバッファ --(十分=1文字分データが溜まったら) --> 文字を出力 という流れで。ただし、デコーダバッファにデータを入れるとき、デコーダバッファが空 && 入力が127以下なら、シングルバイト文字として扱う。逆にデータバッファ…

Flashでターミナルの件

どうも本当にFlash(ActionScript)でターミナルエミュレータを実装した方が簡単そうな気がしてきた。ASでTelnetを実装するのは簡単らしいので(Flex SDKのサンプルプログラムの中に入っていたような)、そこを元にエスケープシーケンスを解釈する機能を載せ…

gcc 4.1のアトミック命令

http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html これ使って高速なスレッドプールを作れないかな。高速スレッドプール+mpio→高速汎用非同期IO。mpioは現在開発中のC++用ライブラリで、IO多重化(kqueue/epoll)を抽象化する。抽象化しつ…

Flashでターミナルエミュレータの実装方針

持ち物: ncursesのWINDOW WINDOWのバッファ×2(1つはncursesの中、もう一つは手元) ptyからの出力を1回readするごとに: roteを経由してncursesに描画 void rote_vt_inject(); void rote_vt_draw(); ncursesのWINDOWからバッファを持ってくる 手元のバッフ…

ncursesで日本語

Rubyのcursesライブラリで試したのだけど、日本語が表示できない…ncurseswというキーワードも発見したのだけど、ヨーワカラン… 試したコード: require "curses" include Curses init_screen begin win = stdscr.subwin(5,30,2,2) win.box(?|,?-,?*) win.set…