́)ノWifiでマルチプレイもできるみたいなので、一緒にやりましょう。(マルチの画面まだ見ていないので、特定の誰かと出来るのかは知りませんけど。━━ΣΣ(゚Д゚;)━━ン上司の意外な一面が見れてびっくりwさて、タイトル的に・・Mayaのプラグインとかシェーダとかそういう話ではありません。ネットワーク系のプログラムを作るとき、そのプログラムを単なるプロセスとして扱いプログラマが運用を担保するか、もしくはミドルウェアとして開発が担保しないかの2つに分けることができます。弊社の場合、Oracleはミドルウェア扱いみたいです。ミドルウェアなのでプログラマ(開発側)がインストールをする事はありませんし、日々の運用は別の部署が主導的に行ってくれます。Memcachedについては?今までのCacheシステムは独自に作っていました。(とあるカンファレンスでも言いましたけど、相当カオスです)独自のシステムはミドルウェアではなく、ただのユーザープロセスに過ぎません。Memcachedはいろいろな部署で使われるようになったのでミドルウェア扱いになりつつあります。Memcachedは揮発性のストレージです。・・・ストレージというとかなり語弊がありますね、キャッシュです。キャッシュなので落ちても止まらないシステムにするのが普通だと思います。DBでは性能的に扱えないけれど永続的にデータを保存しておきたい場合があります。Tyrant?Memcachedプロトコルを解釈できるからです。(個人的な理由として)ではうちの会社でTTをミドルウェアとして認めて貰うにはどうすればいいのでしょうか。いう事を話してみました。Solaris)結局のところ、オープンといえどほぼ1人で作っているものについては採用しがたいとの事でした。既存のものにパッチを当てる方法も、その人が結局会社から居なくなった時に誰も手をつけられない状況になるという過去の遺産のせいで受け入れがたくなっています。このことから、TTをSolaris対応しても私が個人的にパッチを書いている限り、それをSolarisで動作させるよりもLinuxのOSを入れてしまった方が長期的な運用を考えると良いという事でした。別にSFあたりでDBMを書いても良いわけですが、それだと結局のところ個に縛られることには変わりないわけでして現実的な所を考えると、MemcachedのPluginModule機構の中で永続化するTTのSolaris対応のパッチを公式に取り込んで貰うという事になりました。道のりは険しそうです。ちなみに、普通のプロセスとして動作させる分には何も問題はないです。酔っているので何書いているのか分からなくなってきました。Subversion例えばツールで、何かをバージョン管理したい時はバックエンドにSVNを使っていたりするのですが、Davによる自動コミットがONになっていない環境だとファイルの更新が面倒です。ファイルの追加はSVNコマンドでIMPORTを使えば可能ですが、既に存在するファイルの更新は事前にローカルのワークファイルが存在しないとコミットできません。いうわけで、既に登録されているファイルを、チェックアウトしなくても更新できるプログラムを書いてみました。本当はきちんとクラス化してあるのですが、長くなるので主要な部分を切り貼りしていきます。repos;}まずはファイルをSVNに追加するコードです。ファイルをSVNに追加する。cInfo;}次はSVNのファイルの内容を更新するコードです。上の登録のコードもそうですが、基本は差分(DELTA)を計算してそれを送信しているだけです。SVNのファイルの内容を更新する(変更する)。cInfo;}複数ファイルを変更する場合、上記のメソッドを複数回呼び出すと別々のコミットになってしまいます。editor.closeEdit()を複数回呼んでいるので、当然と言えば当然ですが。いうわけで、複数のファイルを1回で追加・更新するコードを書いてみます。その前にファイルが存在するかを確認するメソッドを追加します。RuntimeException(e);}}複数のファイルを良い感じに更新するメソッドです。BLOGにコードを書き写した時に手動で一部のメソッドを書き換えているのでコピペしても動かないかもしれません。事前にexists等を求めているのはlockメソッドでエラーが出るからです。SVNKitのバグかどうかは知りません。複数のファイルをSVNに追加する。ファイルが存在する場合は更新される。コミットは1回で行われる。cInfo;}使い方はこんな感じです。他のメソッドも同じ感じです。addFile(baseUrl,"test01.txt","test01_init_data".getBytes(),"プログラムからからファイルを追加してみる\nテスト。更新したいファイルの数だけList化すれば良いです。01:28日記2009前期ONESHOTをきちんとエミュレート出来ていないのが原因でした。CLOSEに何回か失敗するのが気にならないのであれば、op=MODの時何もしなければ良いだけなんですが、そんなわけにもいかないので、後できちんと対応しようと思います。eventportの存在を教えて貰ったので、とりあえずそれで対応してみよう。́)ノ/dev/pollのサンプルが全然なかったので、Sunのページとlibeventを参考にしました。http://software.schmorp.de/pkg/libev.html今更だけどlibevも見れば良かった・・。簡単なechoサーバのサンプルがあると嬉しかったのですが、見つけられなかった。環境的なところで詰まったのは、/usr/ccs/bin/ldだと-soname指定が上手く動かない事。--with-ldとか指定してもダメだったので、とりあえず以下のページを参考にして/usr/local/bin/ldにシンボリックリンクを張りました。Cabinet同様にconfigure中のstd=c99をstd=gnu99に変更。今は最初に確保した配列を全部/dev/pollのハンドラに書き込んでいるので、これを必要な分だけ登録する。(配列[fd].xxxxって処理してるのを0,1,2,と使うように変更する。)でもどっちが良いのかな・・。́ω・`*)─ン...あとは↑の配列の確保をcallocで処理しているので、終了時にメモリ解放のコードを入れてあげる。́・д・`))なんでcalloc使っているかと言うと、以下のようなコードで配列の添え字を求めているからです。rl.rlim_cur;もうちょっと負荷かけたりスレッド周りの検証したらコードも公開します。追加したコードはfprintfのデバッグコードも含めて100行くらいでした。23:00複数接続でIOがブロックされちゃうのと、切断時に何回もCLOSEを試みて↓のエラーが数秒出続けてしまう。その間は新規接続も受け付けてくれない・・。TyrantをSolaris10に対応させる方法として考えられる方針は以下になります。epoll_waitをエミュレートするソースを見るとkqueueの場合はepollのエミュレートをしていてepollに寄せているみたいなので、とりあえず/dev/pollの実装も寄せる方向で実装してみようと思います。Cabinetってなんぞ?という人は、http://tokyocabinet.sourceforge.net/このページを。Cabinetをビルドしようとしたらいろいろと怒られたので無理矢理ビルドを通してみました。正しい修正かどうかは知りません(*・ε・*)なので指摘は大歓迎です。Solaris」です。あとgccやccが混在していたり、いろいろ弄っていた環境なので実は素のSolarisだとすんなり通っちゃうのかもしれません。アーカイブをげっちゅ。tokyocabinet-1.4.1まずはconfigureを弄ります。これはrealpathが云々と怒られる対策です。std=c99をstd=gnu99にします。外から設定を与えない場合は1カ所の修正で大丈夫ですが、fastestの場合とか中で結構分岐していたので弄くり倒す予定の人は一括置換してください。-O2"Solaris10では「pthread_yield()なんて実装は排除しちゃったよ。あなたたちは違うんです。」という事らしいので、その代わりに「sched_yield」を使います。本当は「_POSIX_PRIORITY_SCHEDULING」が定義されているか確認して、定義されていれば↓を、そうでなければ別の代替実装をするのが正しいのかもしれません。sched_yield()#endif警告が気持ち悪いのでtcutils.cを弄ります。{PTHREAD_ONCE_INIT};あとはconfigureしてgmakeします。localtime_rの実装を有効にするために、LIBS="-lrt"はsched_yield関連で必要です。́)これで動いたら次はTokyoTyrantの/dev/poll対応してみます。23:47日記2009前期とうとうPCサーバを買ってしまいました。Q9550sが発売延期な上に値段が結構高かったのと、Q9650が大幅値下げ(値段が1個下にシフト)したのが理由です。秋葉原まで行ったのですが、迷子になりました。́Д⊂グスン行きたいお店にたどり着けない。あ、ここ安い!→でも違うお店はどうかな~。→あれ・・さっきのお店どこ。・゚・(ノд`)・゚・。いうわけで、構成です。\72,860年末はメモリが安かったのに今は高いですね。メモリがちょっと予算オーバーのため7万円超えちゃった。́Д`)BIOSのアップデートをしたいので最初にWINDOWSを入れました。ついでなので軽くベンチマーク。本当はFFベンチとか走らせたいところですが・・。次に今使っているノートパソコンのベンチマーク。́Д`lll)エエ!!これをサーバにするのもったいない気がしてきた。言いつつFedora10(x86_64)をインストール中。会社はSolarisだしSolarisでコンテナを使えばいろいろ実験が出来そうだなぁと思いつつ、やっぱり便利なLinuxへ。作ってから気がついた。使いたければ調べてねって言うのは横暴だなぁと思った。調べてサンプル作っておこう。Oracle今日はまってしまった行値式について。行値式とはこんな感じのやつです。(1,2),(3,4)と書いていました。́・ω・`)製品によっては行値式をサポートしていないらしいので、そういう場合は以下のように無理矢理書いちゃいます。Subversion普通にSubversionを設定するだけなら簡単ですが、Rootを持っていないサーバに対して設置して貰う場合は依頼内容を明確にしないといけないのでそのメモ。on</Location>HTTPSのみ受け付けるようにするには、以下の記述を追加する。/data/svn/proj1○コミットメールの設定コミットメールはhookディレクトリにpost-commitというファイルを作成します。検索するとRubyを使ってメールを送信しているものが多いですが、会社のサーバには標準インストールされていないのでPERLで書いてみます。これは別の記事に書こう。Subversion以下のコマンドでリビジョンを取得できます。ディレクトリ指定するディレクトリは.svnディレクトリが存在しなければいけません。-nオプションをつけると末尾の改行を出力しません。この機能を使って今回はビルドバージョンを埋め込むようにしました。具体的なコードは面倒なので書きませんが、Antで以下の手順で処理します。・リビジョン番号を取得する・コンパイルする→DESTディレクトリへ・必要なファイルをDESTへコピーする・DESTにあるXMLファイルへリビジョンを埋め込む・WARファイルを作成する・サーバへデプロイするこんな感じかな。正確にはXMLの設定ファイルに「svn.revesion」みたいな定数を定義して、その値を置換しています。(このXMLファイルの設定は実行時にDIで設定保持クラスにInjectしています)バイナリに埋め込む場合はコンパイルする前に埋め込まないといけないですね。これで共有環境のアプリがどのバージョンでコンパイルされたものなのか分かるようになりました。́)当日券を求めるしか無いのかなぁ・・。FFCC今月末発売です。ダンジョン数は増やして欲しい・・・!あと店屋のメニューが重かったのでメニュープログラマーの人がんばって軽くしてください。+公式ブログがいろいろと更新されています。こんな情報もー!(※無断転載です。́・ω・)Wii版もDS版もポチりました。早く発売しないかなー。23:42日記2009前期ちょっと遅くなりましたが、、あけましておめでとうございます。今年もよろしくお願いします。