タグ

programmingに関するmitsuki_engawaのブックマーク (126)

  • mixi大規模障害について 解明編 - mixi engineer blog

    こんにちは、システム技術部たんぽぽGの森です。 先日のmixi大規模障害の原因となったmemcachedの不具合の詳細な解明ができました。 再来週まで発表を見合わせようと思ったのですが、早くお伝えしたほうがいいと思いましたので公開発表致します。 memcachedとlibevent memcachedはlibeventというライブラリを使用してクライアントからの要求(接続、コマンド送信)を処理しています。 libeventを使用するにはevent_baseという構造体を用います。 main threadはmain_baseを使用します。 static struct event_base *main_base; ... int main (int argc, char **argv) { ... main_base = event_init(); ... /* enter the ev

    mixi大規模障害について 解明編 - mixi engineer blog
  • hossy online - といぼっくす(2009-04-21)

    _ [商用ゲーム] 「続・ゲームにおけるスクリプト言語の現状」レポートと感想 その2 前回のエントリに引き続き、IGDA日ゲームテクノロジー研究会(SIG-GT)第13回研究会「続・ゲームにおけるスクリプト言語の現状」 のレポートです。飛ばしている所も多いです。他の方のレポートのついでくらいに見ると良いかも。 汎用スクリプト言語Xtal 設計と実装 バンダイナムコゲームスの石橋氏の発表。会社としてではなく、個人として。 Xtal は Lua の代替を狙った汎用スクリプト言語。google code で公開 している。Xtal は正しくはクリスタルと呼ぶ。2006年から eXTreme Agile Language の略となっているがこれは後付けで、2002年にはクリスタルという名前になっていた。Rubyのように宝石の名前にしたかったのと、FFの最高級宝石の意味を込めて。ライセンスは MI

  • 「続・ゲームにおけるスクリプト言語の現状」レポートと感想 その1 - ほっしー日記

    順番としては、最初2つが古いシステムの設計、次が新しいシステムの設計、最後が新しいシステムの利用。 以下、その時に取ったメモを見ながら書いています。勝手に解釈している所もあり、間違ったことが混じっている可能性ありです。また、とても長いエントリになりそうなため、後半部は別にしました。 ごく簡単な並列処理スクリプトシステムの設計と実装 当時スクウェアで使われていた、ACTORモデル (wikipedia:アクターモデル) を扱う言語、ATEL (Active Time Event Language, エーテル) について。前回 IGDA SIG-GT 12「ゲームにおけるスクリプト言語の現状」に引き続き、クロノトリガーっぽいイベントをサンプルに使用。 Final Fantasy 4, 5の頃は、上から順番に処理が流れる形式だった。その頃は同時にキャラを動かそうとすると、 MES 「さあ、しゅっ

  • Debug Hacks Conference 2009 - firewood's diary

    Debug祭りに参加してきた。 1. ネタ 憧れのオライリーを書くということでオライリーメーカーを使ったら消せなくなっちゃった。 straceを使ったデバッグ。ログが大量に出るが、先頭のほうは無視してよく、後ろから見て行ってエラーになっている部分から探すのが手っ取り早い。 次のの準備中。(消費電力関係?) 2. に載らなかったネタ あるファイルはどのプログラムが吐いているのかを調べたりするときに、rpmコマンドがけっこう使える。rpm -qfであたりをつけてrpm -qlで探したり。その他のファイルアクセスにはstraceが使える。 シェルスクリプトをデバッグするときはbash -xとか。 SysRqネタを書いている途中でカーネルのバグに気づきパッチを送付したらakpm氏がマージしてくれた。(かっこいい!) 3. GDBのデバッグスクリプト GDBはユーザー定義コマンドで構造体表示

    Debug Hacks Conference 2009 - firewood's diary
  • PerlとRubyで省メモリなハッシュを使おう - mixi engineer blog

    サボっていた早朝ジョギング@駒沢公園を再開して2週間たち、やっと抜かれる数より抜く数の方が増えてきたmikioです。今回は、PerlRubyのハッシュの代用としてTokyo Cabinetを使うことでメモリ使用量を激減させられることを説明します。 抽象データベースAPI Tokyo Cabinetには抽象データベースという機構があり、先日、そのPerlRubyのバインディングをリリースしました。それを使うと、各種言語のハッシュとほぼ同じような共通したインターフェイスで、以下のデータ構造を利用することができます。 オンメモリハッシュ:各種言語に標準のハッシュと同じく、メモリ上でkey/valueの関係を表現する。 オンメモリツリー:メモリ上の二分探索木としてkey/valueの関係を表現する。 ファイルハッシュ:いわゆるDBMとして、ファイル上でkey/valueの関係を表現する。 ファ

    PerlとRubyで省メモリなハッシュを使おう - mixi engineer blog
  • 組み込みネット - 組み込みシステム開発にたずさわるエンジニアの方々や,ビジネス・パーソンの方々を支援するWebサイト / CQ出版株式会社

    小型化が進む組み込み機器の世界では,バッテリを長持ちさせることが大きなテーマです.その解決として,HALT(ホルト)*状態に段階を設けて消...

  • PostgreSQL で簡易に MQ - 木曜不足

    「PostgreSQL で安くて早くてうまい MQ 作ってね」的ミッションがどこからともなく降ってきたので、色々調べて試してみたところ、案外よい方法が見つかったので、まとめてみた。 [4/24] 複数キューを扱う場合の方法を tableoid を利用するように更新。 [4/27] フィルタ条件を付ける場合の記法について追記(WHERE 句内の評価順の明示的指定) [4/30] 優先順位に ORDER BY は利用できない旨追記 鍵は advisory lock。PostgreSQL 8.2 以降の機能だ。 メッセージキューと言っても、安くて早いわけだからもちろんフルフルの高機能なわけなく、いろいろ制限がある。 receiver は複数可。メッセージは receiver の一つが受信する。ブロードキャスト/マルチキャストは対象外。 ack あり。ack せずに receiver が落ちた場合

    PostgreSQL で簡易に MQ - 木曜不足
  • 「プログラミング言語を理解するにはどうしたらいい?」という話を聞いて思うこと - 西尾泰和のはてなダイアリー

    「プログラミングとか特定のプログラミング言語とかを習得したくて色々勉強したけど、いまいち理解できた感じがしない、何がいけないのだろう、何を学べばいいんだろう」という話を聞いて思ったこと。 それって、目的が曖昧だから達成感が得られないというだけじゃないのか? 僕の今までの人生の中には「プログラミングを習得した!」と思える瞬間も「Pythonを理解した!」と思える瞬間もなかった。具体的な「Pythonで継続のある言語を実装できた!」とかならある。でも「継続の概念を完全にマスターしましたか」と言われるとそんな気はまったくしない。まだまだ先は長い。しかし僕よりはるかに継続に詳しい人たちが集まって継続に関する議論をしてたりするのを見ると、この道に明確なゴールはないことがわかる。どこまで行っても「まだ先がある」という感じが残るに違いない。 手段が間違っているのではなく、目的が間違っているんだ。「○○を

    「プログラミング言語を理解するにはどうしたらいい?」という話を聞いて思うこと - 西尾泰和のはてなダイアリー
    mitsuki_engawa
    mitsuki_engawa 2009/04/13
    タイトルだけ見て、言語自体を理解することと活用することは別の話だよね……と思ってたらそういう話だった/まあ両方ほどほどに大事だと思う。
  • C# で Acme::x86::CPUID を作りました - 葉っぱ日記

    C#のように実行環境が高度に抽象化された言語でプログラミングしているとき、実行マシンのCPUを判別してプログラムの処理を分岐したいときがよくでてくると思います。 そういうときに困ってしまわないように Acme::x86::CPUID みたいなのを作ってみました。 using System; using System.Runtime.InteropServices; class Acme_x86_CPUID { [DllImport("user32")] private extern static UInt32 EnumWindows(UInt32 p, UInt32 lParam); [DllImport("kernel32")] private extern static UInt32 VirtualAlloc( IntPtr lpAddress, UInt32 dwSize, UInt

    C# で Acme::x86::CPUID を作りました - 葉っぱ日記
    mitsuki_engawa
    mitsuki_engawa 2009/04/02
    コールバックw
  • YappoLogs: CPUの気持ちは大事だけど、VMの気持ちも考えようよ

    CPUの気持ちは大事だけど、VMの気持ちも考えようよ CPUの気持ちになってプログラムを書くということ Kansai.pm#11 参加記その1 - プログラマになりたい ちなみに、下記のコードはデータハザードを解消する為のコーディング例です。データハザードは、命令が利用するデータ間に依存関係がある場合に発生します。前の命令が終わらないと後ろの命令が実行できないとか。ですので、それを解きほぐしてやれば、並列で処理が出来るようになります。という感じでnaoyaさんもぶこめで loop unrolling は perl でもちゃんと効果があるって書いてるけど、それforブロック(スコープ)が一段増えてる事で差が出てるんじゃないかと思うわけです。はい。 以下検証コード use strict; use warnings; use Benchmark qw(:all); cmpthese(500000

  • libcでqsort()を再帰を使って実装してる香具師は怠慢だろ…常識的に考えて - n2s アーカイブス

    (2010/4/1)認識が大いに間違っていた可能性があるため、削除します(魚拓)

    libcでqsort()を再帰を使って実装してる香具師は怠慢だろ…常識的に考えて - n2s アーカイブス
    mitsuki_engawa
    mitsuki_engawa 2009/03/23
    富豪的プログラミング(?
  • へぼへぼCTO日記 - メールアドレス(addr-spec)の正規表現

    能書き 前エントリを書いてからいろいろと調べていて驚いたんだけど、日語のwebsiteで、それなりにまともにRFC822(RFC2822,RFC5322)に準拠した(もしくはきちんと意図的に準拠していない部分を選択している)正規表現はPerlだろうがPHPだろうがRubyだろうが軽くぐぐった程度では見当たらない。PerlのモジュールのEmail::AddressもEmail::Validも程度の差はあれ問題を抱えている。そこらへんの既存の出回ってる正規表現にどういった問題があるかなんてことは次回エントリにて。 というわけで、PerlPHPRubyでRFC5322準拠なメールアドレス(addr-spec)の正規表現を以下に示します。尚、addr-specの最終的な正規表現のみならずそれを作成するに至る部分も併記してあります。これは、最終的な正規表現だけでは難解すぎてとても理解できないか

  • 正規表現に見切りをつけるとき

    Perl, Rubyなど手軽に使えるプログラミング言語に慣れてくると、あらゆるテキストデータの処理に正規表現(regular expression)を使ってしまいがちです。 けれど実は、正規表現の処理能力を超えるフォーマットというのが存在します。その典型的な例が、XMLやJSONのように、入れ子になったデータフォーマットです。

  • Eclipse から秀丸に戻れない理由とかじゃなくて - 深谷の深入りしない日々

    ぜひ Vim とか Emacs に戻れない理由が知りたいです! いや、Eclipseからテキストエディタに戻れない10の理由を読んだ感想なんですが。 秀丸とか (あと Tera なんとかとか Em なんとかとか K2 なんとかとか) まあそういう普通のエディタと IDE を比べたら、IDE の方が優れていて当たり前というか、優れてなかったら IDE の存在ってなんなんだというか、まあそういう感じですが。こと VimEmacs になると、Eclipse とどっちがいいのかわからんのですよ。いや当に。 以下 Eclipse についてライト Vim ユーザがなんとなく雑感。 1. ぶっちゃけ、Vim でも困らないことは結構あります。 入力補完 → Ctrl-N と Ctrl-P で足りてます。(Intellisense 並みの水準でなくても困ってない) メソッドの宣言場所の表示 → ct

    Eclipse から秀丸に戻れない理由とかじゃなくて - 深谷の深入りしない日々
    mitsuki_engawa
    mitsuki_engawa 2008/12/24
    「Java やだなー」/決められた単語(しかも既出なし)を選んで組み立てる場合はIDEの方がいいけど、自分でつくった語を組み上げて行くならエディタじゃないと死ねる。
  • mmap+POSIXセマフォによる高速なプロセス間通信 - mp::ipc_vector - Blog by Sadayuki Furuhashi

    同じホストの異なるプロセスの間で、高速な通信を行いたいときがあります: fork() したプロセスと通信したい場合や、「アプリケーションたくさん → localhostのクライアントデーモン1つ → サーバー」という形で接続したい*1 *2 場合などなど。 あるいは共有リソースを管理するプロセスが必要なとき、具体的には memcached が localhost で動いるイメージ。 こんなときに高速なプロセス間通信がしたい。スレッドなみに高速だと嬉しい。 そこで、POSIXセマフォを使って排他制御をしつつ、mmap(2) を使って共有したメモリの上でデータをやりとりすることで、高速にプロセス間で通信を行えるようにするライブラリを作ってみました。 さっそくベンチマーク: 時間 スループット換算 UNIXドメインソケット 4.44 sec 25 MB/s ipc_vector(sleepなし)

    mmap+POSIXセマフォによる高速なプロセス間通信 - mp::ipc_vector - Blog by Sadayuki Furuhashi
  • 大容量メモリの確保の話 - kazuhoのメモ置き場

    参照: http://d.hatena.ne.jp/ryocotan/20081006/p1, http://d.hatena.ne.jp/ryocotan/20081011/p1 Windows ってオーバーコミットしなかったような 一気に大量に malloc すると、swap が足りなくて失敗するんじゃないか*1 swap は適宜拡張されて行くのでちょっとずつ malloc すれば OK みたいな いずれにせよ、GB 単位のメモリを確保して使うのであれば、同サイズのファイルを作って、CreateFileMapping (mmap) するのがいいんじゃないのかなぁ。そうすれば、ユーザー空間の連続アドレスが確保できれば (64bit なら問題ないし、32bit でも事前にほぼ成否が予測できる)、malloc のように環境によって成否が分かれるとか、OOM killer でいきなり殺されると

    大容量メモリの確保の話 - kazuhoのメモ置き場
  • はてなブログ | 無料ブログを作成しよう

    台北市立動物園と迪化街めぐり 子連れ台湾#5 年越し台湾旅行5日目、レジャーや友人との事を楽しむ日です。前日の様子はこちら www.oukakreuz.com 台北市立動物園へ パンダ館 パンダが見られるレストラン 迪化街へ 林茂森茶行でお茶を購入 小花園で刺繍グッズを購入 黒武士特色老火鍋で夕 台北市立動物園へ 松…

    はてなブログ | 無料ブログを作成しよう
    mitsuki_engawa
    mitsuki_engawa 2008/10/22
    VC6/+xpだと1.9G(ほぼ理論最大値)一気に取れたので、malloc()の実装の差では。
  • Rubyのsprintfは数字を3桁ずつコンマで区切る書式指定がない件 - http://rubikitch.com/に移転しました

    1,000,000等と表示することは多いというのに、いちいちgsub使うのはうざい。数字の表記方法でよく使われるのだからsprintfでサポートすべきだと思うな。スクリプト言語なんだし。sprintf.cと自前で実装してるんだからさ。 "%#d" % 100000 # => "100000" "%#x" % 0x100000 # => "0x100000" "%#o" % 0100000 # => "0100000" "%#b" % 0b1011 # => "0b1011" "%," % 100000 # => # ~> -:5:in `%': malformed format string - %, (ArgumentError) # ~> from -:5:in `<main>' 「%#d」とか「%,」あたりが妥当だろうか。 追記 ,だけでいいんでしたっけ? _で区切る国とかありません

    Rubyのsprintfは数字を3桁ずつコンマで区切る書式指定がない件 - http://rubikitch.com/に移転しました
    mitsuki_engawa
    mitsuki_engawa 2008/10/18
    地域によってコンマ、ピリオド、下線と使う文字が違うって話は聞いたことある。
  • 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のメモ置き場
  • Cで、関数の引数を後始末するのは呼び側だったよね - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「もっとえぐいトリックはないものか?」で次のような関数を出しました。 unsigned _mark; void mark(int arg) { _mark = *(unsigned *)(&arg - 1); } これは、変数_markに、呼ばれた時点での戻り番地を代入する関数です。環境に依存しますが、多くの場合、戻り番地は第1引数のすぐ下に置かれています。よって、&arg - 1 が戻り番地の格納場所のアドレスです。 これで確かに戻り番地を取れるのですが、具合が悪い点があります。迂闊にも見落としていたのですが、markが戻った直後に、引数をスタックから取りはらう処理が実行されます*1。つまり、変数_markの指しているアドレスに飛ぶと、とりあえずスタックをはらうので、スタックトップがずれてしまう可能性があります。 これは「可能性」で、gccの場合ではスタックのズレが起きないときもあります

    Cで、関数の引数を後始末するのは呼び側だったよね - 檜山正幸のキマイラ飼育記 (はてなBlog)
    mitsuki_engawa
    mitsuki_engawa 2008/09/30
    あっ・・。