タグ

ブックマーク / kazuhooku.hatenadiary.org (17)

  • gzipされたcore-fileをスパースファイルとして展開する方法 - kazuhoのメモ置き場

    開発者の皆さんは、gzipされたcore-fileを送りつけられた経験をお持ちのことだと思います。ですが、ディスク容量に厳しいSSDやVM上で作業していると、展開すると数10GBにもなるコアファイルを受け取ってもどうしようもありません。 で!も! コアファイルをスパースファイルとして展開すれば解決☆ gunzip - < ../core.12345.gz | cp --sparse=always /proc/self/fd/0 core.12345具体的にいうとこんな感じですね。なんか一仕事終えた感あります。まだ解析してないんですけど。

    gzipされたcore-fileをスパースファイルとして展開する方法 - kazuhoのメモ置き場
    koyhoge
    koyhoge 2013/03/12
    あー cp で stdin を扱うのに /proc 使うという発想がすげー。
  • JSX で Array#forEach が5倍以上速くなった話 - kazuhoのメモ置き場

    JSX の進化速度が半端ない - ぐるぐる~ で紹介していただいているとおり、最新の JSX では function expression の型宣言を省略できるようになっています。これを利用して、たとえば配列の合計を求める場合、 var sum = 0; [ 1, 2, 3, 4, 5, 6, 7, 8 ].forEach(function (n) { sum += n; }); のように、JavaScript と 100% 同様に書くことができるようになりました。省略形を利用して [ ... ].forEach((n) -> { sum + n; }); でもいいです。 ところでこのコード、見た目は同じなんですが、実は JSX だと JavaScript よりも5倍以上速く動くんです。まだ最適化があまいところがあるのに。 なぜか。JavaScript の Array#forEach は配

    JSX で Array#forEach が5倍以上速くなった話 - kazuhoのメモ置き場
    koyhoge
    koyhoge 2012/06/12
    for の中の a.length は未だに遅いのかー。
  • haXe と JSX の最大の違いは null と undefined の扱い - kazuhoのメモ置き場

    JavaScript のコードをデバッグ中、突然出現する null や undefined に苦しめられている方も多いのではないでしょうか。haXe と JSX の一番大きな差は、個人的には、その null (と undefined) の扱いにあると考えています。 haXe の JavaScript 実装では、全ての基型が nullable とされています*1。つまり、たとえば haXe の Bool 型は true, false, null の3つの値を取りうることになります*2。null が入っているかどうかはプログラマがいちいち確認する必要があります。 // haXe class Test { static function f(b : Bool) : Void { if (b == true) { // b is true } else if (b == false) { //

    haXe と JSX の最大の違いは null と undefined の扱い - kazuhoのメモ置き場
  • JSX はなぜ「速い」のか - kazuhoのメモ置き場

    なぜ「速い」のか、について JSX 開発者の立場から。 たとえば、シューティングゲームで一番重たい処理は何か。言うまでもなく衝突判定。多数の弾や敵機の衝突判定を毎フレームごとに行う必要があり、この演算が重たい。 JSX に同梱されている web/example/shooting.jsx には衝突判定のコードが複数あるが、一番重たいのは Bullet#update 関数で、その処理は以下のようになっている*1。 for (var rockKey in st.rocks) { var rock = st.rocks[rockKey]; if (this.detectCollision(rock)) { if (rock.hp == 0) return false; inDisplay = false; if (--rock.hp == 0) { st.score = Math.min(st.s

    JSX はなぜ「速い」のか - kazuhoのメモ置き場
    koyhoge
    koyhoge 2012/06/02
  • Cのコールバック関数をC++のメンバ関数にバインディングする方法 - kazuhoのメモ置き場

    たとえば libevent のような C 言語でかかれたイベント駆動型のライブラリを C++ から使っていると、C++ のメンバ関数をコールバックとしてセットできたらうれしいことが多いですよね。以下のようにすればできます。 たとえば、コールバック関数をセットする関数の型が、 void set_foo_callback(void (*)(void* cb_arg), void* cb_arg); なら、以下のようにクラスとメンバ関数を引数にとるテンプレート関数を定義し、 template <typename T, void (T::*FUNC)()> void to_foo_callback(void* cb_arg) { T* obj = reinterpret_cast<T*>(cb_arg); (obj->*FUNC)(); }以下のように受け渡せばいい。 class K { publ

    Cのコールバック関数をC++のメンバ関数にバインディングする方法 - kazuhoのメモ置き場
  • TwitterやFacebookのURLには、なぜ#!が含まれるのか (SEOとAjaxのおいしい関係) - kazuhoのメモ置き場

    Ajaxを使うためにはページ内リンク (hash fragment=URLの#以降) を使うのが一般的*1 hash fragmentはサーバに送信されないから、JavaScript非対応のブラウザだと動作しない 特にサーチエンジンのクローラ等で問題になる*2 そこで Google は、#! が含まれる URL を hash を含まないものに読み替える仕組みを提唱している。例えば「www.example.com/ajax.html#!key=value」のサーチエンジン用URLは「www.example.com/ajax.html?_escaped_fragment_=key=value」になる。 TwitterやFacebookはこの仕様に従うことで、Ajax な UISEO を同時に実現している、というわけ。ということを調べたなう。 参照: Getting Started  | 

    TwitterやFacebookのURLには、なぜ#!が含まれるのか (SEOとAjaxのおいしい関係) - kazuhoのメモ置き場
  • 2010年代には Apache の mpm_prefork とか流行らない (もしくは HTTP keep-alive のメリットとデメリット) - kazuhoのメモ置き場

    HTTP の持続的接続の功罪について はじめに、HTTP の持続的接続 (keep-alive) のメリットについて。持続的接続を使うメリットは、以下の2点。 TCP 接続の確立にかかる時間の節約*1 TCP の接続と切断に必要な資源 (CPUとネットワーク) の節約 ウェブブラウザ〜データセンタ間の通信で、持続的接続を使う理由は、このうちの前者。特に太平洋を超えるようなケースだと、TCP 接続に0.2秒とかかかるので、メリットが大きい。 一方、持続的接続のデメリットは、 接続が切断されるまでの間、その接続を維持するためにコストがかかる (主としてメモリが無駄になる) という点になる。特に、1プロセス1コネクションを前提とするアーキテクチャ (例: mod_perl) だと、メモリの無駄使いが、とてもひどいことになる。 そこで、ブラウザからの接続を受ける HTTP サーバとアプリケーション

    2010年代には Apache の mpm_prefork とか流行らない (もしくは HTTP keep-alive のメリットとデメリット) - kazuhoのメモ置き場
  • Cosmic っていうネットワークストレージを作り始めた - kazuhoのメモ置き場

    GitHub - kazuho/cosmic: fail-safe management tools for network-based software RAID, using mdadm + iSCSI 概要 (というか近場の目標) は、以下のとおり。 fail-safe な network RAID 多重マウントが発生しないプロトコルを実装 RAID だから DRBD や MySQL の async replication のような lost updates 問題がない software RAID + NBD を使用 (NBD は遅いから iSCSI 対応するかも) RDBMS レベルのレプリケーションや DRBD と異なり、高可用性のあるブロックデバイスを提供するソフトウェアレイヤとして機能 様々なストレージミドルウェアを統一的に管理可能なので、管理コストが低い バックアップとかも

    Cosmic っていうネットワークストレージを作り始めた - kazuhoのメモ置き場
  • InnoDB で fsync しない方法と、そのメリット - kazuhoのメモ置き場

    InnoDB はデフォルトでは同期I/O *1だけど、 innodb_flush_method=nosyncっていう隠しオプションがあって、それを有効にすると MyISAM みたく fsync しなくなるよ。ってソースコードちら見した自分が言ってた。 この設定がうれしいのって、どういう時だろう? MySQLWikipedia にも書いてあるけど、スレーブ運用してて「クラッシュしたらリカバリで数時間かかるし、データ一貫性チェックするくらいだったらバックアップからリストアして再開しちゃうもんね〜」的な向きにはおすすめなのかしらん。 とは言え、fsync しないってことは OS のページキャッシュに書込みデータが滞留することになる → buffer_pool 削る必要が出てくる → 無駄な I/O が増える、わけで、設定するメリットがあるかどうかは知らない。swappiness=0 にしと

    InnoDB で fsync しない方法と、そのメリット - kazuhoのメモ置き場
  • nopan っていうレポジトリから直接ソフトウェアをインストールするインストーラを作り始めた件 - kazuhoのメモ置き場

    perl の場合、CPAN モジュールは sudo cpan -i Module の1コマンドでインストールできる。でも、svn や git レポジトリのコードは、チェックアウトして perl Makefile.PL && make all test && sudo make install とか、めんどくさい。 なので、svn や git レポジトリからソースコードをダウンロードしてインストールするツールを作り始めた。名前は、CPAN モジュール以外も簡単にインストールできるところから、Not-only CPAN、略して nopan。 こんな感じで動きます。まだ適当だけど。 $ sudo nopan http://github.com/kazuho/kaztools.git downloading files from URL:http://github.com/kazuho/kazto

    nopan っていうレポジトリから直接ソフトウェアをインストールするインストーラを作り始めた件 - kazuhoのメモ置き場
  • ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない - kazuhoのメモ置き場

    タイトルは煽り入ってますが。 仮に動的ページを生成するのにかかる時間が1秒、そのうちデータベースやmemcached等リモートサーバへの問い合わせ時間を除くいたCPUの処理時間が0.1秒とする。また、ピークのリクエスト処理量は、平均の2倍とする。 そうすると、クアッドコアのアプリケーションサーバで処理できるリクエストは、 4 core * 10 reqs/sec * 86,400 sec/day * 30 day/mon / 2 = 51,840,000 reqs/mon と、約5,000万PV/月を1台で捌けることになる。 CPUが動いている時間は全処理時間の10倍と仮定したわけだから、アプリケーションサーバの最大同時接続数は 4 core * 10 = 40 程度あればいいことになる。実際には、安全係数を2倍かけて 80 とか。リクエストの処理に必要なメモリ量を 100MB とすると、

    ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない - kazuhoのメモ置き場
    koyhoge
    koyhoge 2009/12/27
    Coreが増えるとそんなリニアにreq/sが上がるもんなんですか?
  • linuxで httpd が使ってるメモリ総量を調べる話 - kazuhoのメモ置き場

    Perl等のLLでウェブアプリケーションサーバを書いていると、普通はマルチプロセスモデル (apache なら prefork とか) で運用することになると思う。で、それらがどれだけメモリを使っているか、っていうのはチューニングにおいて重要になってきたりする (んじゃないかと思う) けど、そもそもメモリの総使用量をどうやって測定するのか。 20:20追記: PSSを使ってワンライナーで測定するのが簡単 (コメント欄参照)。kosakiさんありがとうございます。 $ sudo perl -le 'for my $p (@ARGV) { open my $fh, "< /proc/$p/smaps" or die $!; map { /^Pss:\s*(\d+)/i and $s += $1 } <$fh> } print $s' `pgrep plackup` 914325以下は初回投稿時

    linuxで httpd が使ってるメモリ総量を調べる話 - kazuhoのメモ置き場
  • (特にMyISAMを使っていた)ウェブ屋さんがInnoDBを使う場合の設定項目 - kazuhoのメモ置き場

    InnoDBはMyISAMと比較して安全(OSクラッシュや電源断が発生してもテーブルが壊れない)分、書き込みが遅い。データベース屋さんからすると、それは当然のことでMyISAMがおかしいんだ、ということになり、だからバッテリバックアップ機能のついたRAIDカードを使うんだ、という話になる。でも、MyISAMを使っているウェブ屋さんの現場では、場合によって多少データが消えてもかまわないから、安いハードウェアで大量のアクセスを捌きたい... って乖離があるんじゃないかなーと思ってる。 そのような場合には、my.cnf の innodb_flush_log_at_trx_commit パラメータを調整することで、MyISAMに比肩する書き込み速度を得ることができる(そのかわり、クラッシュや電源断の場合は、設定によって直近1秒以内の変更が失われる)。 他のパラメータも含めて書いておくと、データベー

    (特にMyISAMを使っていた)ウェブ屋さんがInnoDBを使う場合の設定項目 - kazuhoのメモ置き場
  • 彼氏がMyISAM使ってた。別れたい… - kazuhoのメモ置き場

    追記: マジメな比較はこちら:Open database life: MyISAMとInnoDBのどちらを使うべきか MyISAMだとPostgreSQLと並べられた時なんか恥ずかしいww 下向いちゃうしww ウェブサイトにはせめてInnoDB使って欲しい・・・ 勉強会とかで発表されたら・・・・もう最悪ww せめて普通にトランザクションやMVCCぐらいは対応して欲しい。 常識的に考えて欲しいだけなんです! MyISAMでテーブルロックしちゃった時の遅さとか分かる? あのね?たとえばピーク時10〜20並行ぐらいで書込みとか行くでしょ? それぞれ別の接続で来るわけじゃない? みんな普通にグループコミットやアシッドネス期待してるわけでしょ? MyISAMでテーブル壊れてリペアしてたら大恥かくでしょうがww じゃあ MyISAM はどういう用途に適しているのか。待て! 次号!*1 参考: 彼氏が軽

    彼氏がMyISAM使ってた。別れたい… - kazuhoのメモ置き場
  • 「テキストプロトコルは遅くないよ」という話 - kazuhoのメモ置き場

    「バイナリプロトコルは速い」「テキストプロトコルは遅い」という言説を、ときおり目にするけど、それって当なのか。個人的には、それって昔の話だと思ってる。 SMTP みたいな、ペイロードについてもターミネータ(とエスケープ)を使うプロトコル*1は確かに遅い。で、FTPプロトコルでは、大容量のデータを「高速」に転送するために、制御用のTCPコネクションと転送用のコネクションを分けたりしてた。 だけど、HTTPプロトコルは、テキストプロトコルだけど、ペイロードについてはターミネータを使わない。keep-alive を行う際には、Content-Length ヘッダ(あるいはchunkedエンコーディング)を使うことで、ペイロードのパース/変換処理を不要にしている。別の言い方をすると、テキストプロトコルだからと言って、バイナリプトロコルよりペイロードの処理時間が長くなるとは限らない。HTTP 以降

    「テキストプロトコルは遅くないよ」という話 - kazuhoのメモ置き場
  • 引数が 26 個の関数呼び出しってどうよ - kazuhoのメモ置き場

    数ヶ月前に書いたコードを保守しようとしたら、 こんなのが出てきてウケた。 unsigned hits[24]; ... if (sscanf(buf, "%u,%u,%u,%u,%u," "%u,%u,%u,%u,%u," "%u,%u,%u,%u,%u," "%u,%u,%u,%u,%u," "%u,%u,%u,%u", hits + 0, hits + 1, hits + 2, hits + 3, hits + 4, hits + 5, hits + 6, hits + 7, hits + 8, hits + 9, hits + 10, hits + 11, hits + 12, hits + 13, hits + 14, hits + 15, hits + 16, hits + 17, hits + 18, hits + 19, hits + 20, hits + 21, hits

    引数が 26 個の関数呼び出しってどうよ - kazuhoのメモ置き場
    koyhoge
    koyhoge 2009/02/16
    24回ループでまわすのとどちらが可読性が高いかは悩むなぁ。
  • XMLBind を coderepos にアップロード - kazuhoのメモ置き場

    昔書いた C++ の XML バインディングである XMLBind を coderepos にアップロードしました。 http://coderepos.org/share/browser/lang/cplusplus/XMLBind/ ドキュメントは探さないと出てこないけど、こんな感じ。 たとえば、 struct Date { int year; int month; int day; };と <Date> <year>2003</year> <month>12</month> <day>18</day> </Date>を相互変換したい場合は、 // 変換情報の定義 struct XBTraits<Date> : public XBTraitsBase<Date> { XBObjectBindingW GetBinding() { return XB_STRUCT( XB_BIND("ye

    XMLBind を coderepos にアップロード - kazuhoのメモ置き場
  • 1