タグ

ブックマーク / developer.cybozu.co.jp (11)

  • ゼロ幅文字にエンコードした隠し情報で、文書をリークしたメンバーを特定 | 秋元@サイボウズラボ・プログラマー・ブログ

    とある会員制掲示板からの文書の流出に困った運営者が、ユニコードの見えない文字「ゼロ幅文字(Zero-Width characters)」を使って流出させたユーザーを特定した、という話が出ていました。 数年前の話、Tom さんが所属していた競技ビデオゲームのチームでは、ログインが必要なプライベートの掲示板を使って連絡していました。その掲示板に書かれた秘密情報や戦術に関する重大アナウンスなどがしばしば掲示板外のウェブにコピペされ、チームにとって大きな問題となっていたそうです。 外部ユーザーの攻撃で中身が漏れたというよりは、メンバーの誰かがコピーしているのでは、と考えた Tom さんは、当時気になっていたユニコードのゼロ幅文字を使ったトリックを仕掛けたそうです。 ユーザーを特定する情報を、見えない文字に変換して埋め込む ログイン中のログインユーザーのユーザーIDを、一定のルールによってゼロ幅文字

    ゼロ幅文字にエンコードした隠し情報で、文書をリークしたメンバーを特定 | 秋元@サイボウズラボ・プログラマー・ブログ
  • 恐怖の JVM 大量メモリ消費!メモリリークの謎を追え!! - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは、ミドルウェア開発チームの青木(@a_o_k_i_n_g)です。将来の夢は川口浩探検隊に入ることです。 先日、弊社のアプリケーションサーバーで大量にメモリを消費するという現象に遭遇しました。アクセス頻度の低いサーバーがメモリを大量消費するという謎深いものでした。 発生当初の状況はこんな感じです。 アプリケーションサーバーでは Jetty が稼働 現象が発生した JVM は 5GB 程度のメモリを消費しており、明らかに通常ではない量のメモリを消費している 複数台のサーバーで発生していたが、全てで発生したわけではない。 また、発生したサーバーはいずれもアクセス頻度が少ないサーバーだった。 ヒープ、パーマネント、スタック ひとまず、JVM でトラブルが発生した時は何はともあれヒープダンプとスレッドダンプを見るに限ります。各種情報の取得をインフラ部隊へ依頼し、得られたヒープを解析すると、

    恐怖の JVM 大量メモリ消費!メモリリークの謎を追え!! - Cybozu Inside Out | サイボウズエンジニアのブログ
    tyru
    tyru 2015/02/04
  • HTTPパーサにおけるSSE4.2最適化の威力と注意点 - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは、サイボウズ・ラボの光成です。 PicoHTTPParserは@kazuhoさんたちが開発している高速なHTTPパーサです。 同じ作者によるHTTPサーバH2Oにも使われています。 11月4日の開発ブログによると、その時点でNode.jsなどに使われているhttp-parserの10倍程度の速度を誇るそうです(現在はhttp-parserも速度向上しその差は縮まりました。それでも4倍以上の差があるようです)。 該当ブログにはその高速化のためのノウハウが書かれていて大変興味深いです。ただIntel系CPUに搭載されているSIMD命令は用いられていませんでした。今回、@kazuhoさんと一緒に文字列処理専用のSSE4.2を用いることで1.7~1.9倍の高速化を達成しました(Improving Parser Performance using SSE Instructions (in

    HTTPパーサにおけるSSE4.2最適化の威力と注意点 - Cybozu Inside Out | サイボウズエンジニアのブログ
    tyru
    tyru 2014/12/04
  • Kazuho@Cybozu Labs: crontab を使って効率的にサービス監視する方法

    監視とは継続的なテストである、という話 (もしくは cronlog とテストスクリプトを組み合わせた監視手法について)に続きます 今日ようやく、積ん読状態だった「Software Design 2010年1月号」を手に取ったのですが、特集が「今日から使えるスクリプト満載! [プロ直伝]お手軽サーバ監視術」。興味深く拝読したのですが、もっと楽ができるのにと思うところも。ちょうど、昨年末に運用しているサービス「パストラック」のサーバを移転し、crontab と perl で書かれたスクリプト群を使った監視環境を構築したところなので、そこで使っているスクリプト cronlog を紹介したいと思います。 特集の前書きにも書かれていることですが、サーバやネットワーク機器が多数ある環境なら、Nagios を始めとする、専ら監視のために作られたソフトウェアを使って、監視システムを構築すべきです。逆に小規

    tyru
    tyru 2012/04/15
    ブクマしてなかった...
  • 男性ストリッパーを使った脅迫看板広告 | 秋元@サイボウズラボ・プログラマー・ブログ

    すごいことを考えたもんだ、という屋外広告のアイデアです。 Interbestという企業が、”The sooner you advertise here, the better.”(ここに早く広告を出した方がいいですよ)というメッセージと共に張り出したこの看板、日が経つにつれて写っている男性モデルが… …ごらんの通り、着るものを脱いでいく看板に変えられていきます。下に来るにつれて、だいぶひどいことになってきてますが、この看板が大きな話題を呼んだということで、この次の看板はこうなりました。 メッセージのほうも、「ヒャー…! ありがとうRadio 2」と、広告枠を買ってくれたラジオ局への感謝に変わっています。担当者も、この先の写真はヤバイ、いいかげん誰かスペースを買ってほしい、と思っていたのでは。 若くてキレイな女性を使って目を惹く、なんてのは良くある手段で今さら人目を惹かない、ということですか

    男性ストリッパーを使った脅迫看板広告 | 秋元@サイボウズラボ・プログラマー・ブログ
  • 仮想世界で家の中に暖炉を作る手順を解説中の男性、予想外のトラブルを中継してしまう | 秋元@サイボウズラボ・プログラマー・ブログ

    Minecraftという3D仮想世界のアルファ版で遊んでいる男性が、彼の建てた家の中を案内してくれる動画です。 最初の1分は家の中を歩きまわり、廊下にたくさんたいまつが設置されているのがわかります。家の中心で、屋内プールの横、石に囲まれたところを暖炉として火をつけたのですが… 大きな火が近くに燃え移るなんて、よくできてますね! 気の毒なんですが、見てて笑いが止まりませんでした。力無い沈黙のあと、最後に「…これで終わりです」というセリフもなんだか…

  • Kazuho@Cybozu Labs: TCP通信ではデータの送信をまとめて行うべき、もうひとつの理由(& サーバのベンチマーク手法の話)

    TCP通信をするプログラムを書く際に「データの送信はまとめて1回で」行うべき、というのは鉄則と言っていい、と思います。その理由としては、パケット数を最小限に抑えることでオーバーヘッドを少なくするためだと一般に説明されますが、自分はもうひとつポイントがあると考えています。次のグラフを見てください。 グラフは、一定量のデータを転送するのにかかる時間と使用するブロックサイズ(1回のwrite(2)で書き込むサイズ)の関係を表したものです注1。 ホスト間のTCP通信を行っている場合は、TCPのバッファが有効に機能するので、ブロックサイズ(=パケット数の逆数)による速度の変化は、ほぼありません。一方、同一ホスト上で通信を行うと、ブロックサイズと反比例して所要時間が反比例の関係にあることがわかります。 原因は、同一ホスト上の通信では、送信プロセスがwrite(2)を呼ぶたびにコンテクストスイッチが発生

  • Kazuho@Cybozu Labs: リモートからXenのDomUとかLVMやファイルを差分バックアップするスクリプトを書いた

    月曜から XenServer の運用を始めたんですが、以下のような要件のバックアップツールがほしくなりまして。ちょっと調べた範囲で見つからなかったので、書いてみました。 スナップショットによる無停止でのバックアップ 差分/多世代バックアップが可能 ネットワーク越しにプルベースでバックアップが可能 元々は去年書いたバイナリファイルの差分バックアップスクリプト (データベースの差分バックアップとウェブサービスのお引っ越し)。これを拡張して、LVMを操作したり、バージョン番号を自動採番するようにしたり、ssh経由での転送機能をつけたりした感じです (ディスクは遅いからギガイーサなら over ssh でも問題ない)。 詳しいことを知りたい人にはソースコードを読んでいただくとして (といっても300行ちょい)、たとえば XenServer 上の DomU のバックアップを取るなら、サーバ上で xe

  • Kazuho@Cybozu Labs: Pacific という名前の分散ストレージを作り始めた件

    大規模なウェブアプリケーションのボトルネックがデータベースであるという点については、多くの同意が得られるところだと思います。解決策としては、同じ種類のデータを複数の RDBMS に保存する「sharding」 (別名:アプリケーションレベルパーティショニング/レベル2分散注1) が一般的ですが、最近では、分散キーバリューストア (分散 KVS) を使おうとする試みもみられるようになってきています。 分散 KVS が RDBMS sharding に対して優れている要素としては、事前の分割設計が不要で、動的なノード追加(とそれにともなう負荷の再分散)が容易、といった点が挙げられると思います。一方で、Kai や Kumofs のような最近の実装では eventually consistent でこそ無くなってきているものの、ハッシュベースの分散 KVS は、レンジクエリができなかったり (例:

  • グルグル回すグーグルの新CAPTCHA特許 | 秋元@サイボウズラボ・プログラマー・ブログ

    Googleのリサーチブログで紹介されていた、新しいキャプチャ方式の論文[pdf] こういう画像を、ちゃんと上を向くように直すことで、ユーザが人間であることを確認する、というもの。 なお、Aは人間でもコンピュータでも上がわかるような画像、Cは人間でもコンピュータでも上がわからないような画像、Bが人間だけ簡単に上が判定できる画像、だそうだ。画像にも、上がはっきりしているものと、どちらが上と取れる画像があるので、このキャプチャに向いた画像を選別して使うと書いてある。 3枚ぐらいの判定でよい結果が出たということで、実際に今CAPTCHAがあるようなWebのフォームに適用しようとするとこんなイメージになる。 また、キーを入力するタイプの今主流のキャプチャよりも、キーボードが無くて画面も小さいこういうデバイスで特に有用である、とも言っている。 [追記] ジョェバンニ、じゃなくてamachangが数時

    グルグル回すグーグルの新CAPTCHA特許 | 秋元@サイボウズラボ・プログラマー・ブログ
  • それPEAR::Text_Figletでもできるよ | 秋元@サイボウズラボ・プログラマー・ブログ

    Zend_Textがすごい件w Zend Framework使ってない人もPEAR::Text_Figletにあるのでできるよ。しかもstableだ。 > pear install Text_Figlet サンプルソース <?php require_once 'Text/Figlet.php'; $figlet = new Text_Figlet(); $error = $figlet->LoadFont('slant.flf'); if (PEAR::isError($error)) { echo 'Error: ' . $error->getMessage() . "n"; } else { echo $figlet->LineEcho('Read Asiajin!') . "n"; } 実行結果 C:>php figlet_test.php ____ __ ___ _ _ _ __

  • 1