タグ

ブックマーク / sfujiwara.hatenablog.com (13)

  • [perl] コマンドラインから Day One に投稿する - 酒日記 はてな支店

    最近 Day One ってメモアプリが人気なんでしょうか。便利ですよね。 とりあえず Dropbox 同期している場合限定ですが (iCloud の仕組みをよく知らない)、コマンドラインから投稿するスクリプトを書いてみました。 $ perl dayone.pl 標準入力からテキストを入れましょう(UTF-8で)。 (入力終了はCtrl-D) C0BE48265C4B11E1903988CB6A462356.doentry created.要するに ~/Dropbox/Journal.dayone/entries 以下に plist ファイルを置けば、あとはよしなにやってくれるみたいですよ。 [追記] @fujiwara つ /Applications/Day One.app/Contents/MacOS/dayone 2012-02-21 15:12:41 via Echofon to @

  • #isucon ではどんなことを考えながら作業していたか - 酒日記 はてな支店

    前のエントリ #isucon で優勝してきました は当日夜に酔っ払った頭で勢いで書き上げたので、少し冷静に振り返ってまとめてみます。 最初のボトルネック発見 DBCPU 4コアをフルに使って回っているのですぐに Query が重いのは分かった 重いクエリはキャッシュすれば、という発想は自然 (実際 MySQL のクエリキャッシュだけでスコアは 1.5倍程度上がる)、とはいえ このクエリは実行に 300〜400 ms 程度かかる アプリケーションの要件上、毎秒更新する必要がある 1秒ごとに更新に 0.3〜0.4秒かかる処理をするのは悪手だろう cache が消えてから生成、とすると生成処理が複数同時に走って無駄が大きい (実際ベンチマーク中の slow query を見ると 600〜700 ms 程度の時間が掛かっていた) ということで、DB のテーブル構成を変更して高速化できないか、

    #isucon ではどんなことを考えながら作業していたか - 酒日記 はてな支店
    ikasam_a
    ikasam_a 2011/08/29
  • #isucon で優勝してきました - 酒日記 はてな支店

    なんでもありのWebアプリケーション高速化バトル、#isucon に会社の同僚 @Songmu @sugyan と3人で、fujiwara組として参戦してきました。結果、幸いにも優勝を勝ち取ることが出来ました。 こんなに楽しいイベントを企画、運営していただいた Livedoor の皆様、当にありがとうございます!! さて、ざっとチューニングした経過などを記録しておきます。 [追記] もっと詳しいレポートを @Songmu が上げているのでそちらもご覧ください おそらくはそれさえも平凡な日々: #isucon で優勝させてもらってきました [さらに追記] #isucon ではどんなことを考えながら作業していたか - 酒日記 はてな支店 自分でももう少し詳しく振り返りエントリ書きました。 まず説明を聞いて、環境を作るところから。IPアドレスでは作業がしにくいし事故も起こりそうなので、host

    #isucon で優勝してきました - 酒日記 はてな支店
    ikasam_a
    ikasam_a 2011/08/28
    すげー
  • MySQLで参照の負荷分散を行うslaveは3台から構成するのがよいのでは - 酒日記 はてな支店

    前回の記事 MySQLをmaster:slave=1:1構成にして参照をslaveに向けるのがなぜ良くないか の続きです。 master : slave = 1 : 1 で参照を slave に分散してもまったく美味しくないわけですが、では参照の負荷分散を行いたい場合の slave は何台で構成するとよいのか考察してみます。具体的には slave 2台の場合と 3台の場合でどちらがお得か。 台数を増やすということは、どこかに障害が発生する確率が高まる、ということです。1台の slave に障害が発生してダウンした場合のことを考えてみます。 slave * 2 → 残り 1台で処理継続 生き残った1台あたりの処理が 2倍になる slave * 3 → 残り 2台で処理継続 生き残った1台あたりの処理が 1.5倍になる たとえば 1台あたり最大 1000qps の処理能力があるとします。sla

    MySQLで参照の負荷分散を行うslaveは3台から構成するのがよいのでは - 酒日記 はてな支店
  • MySQLをmaster:slave=1:1構成にして参照をslaveに向けるのがなぜ良くないか - 酒日記 はてな支店

    MySQLのmasterとslave 1:1にして参照をslave向けるのってやりたがる人多いみたいだけど、性能たいして上がらない割に可用性落ちるだけだからやめようキャンペーン 2011-06-19 00:16:30 via YoruFukurou MySQL はレプリケーションが簡単に構成できるのですが、時折 master 1台 に対して slave 1台、更新処理は master に、参照は slave に、という構成を目にします。 個人的にはこの構成はお勧めでないと思っているので、その理由を考察してみます。 1. 可用性が落ちる 当然ですが、master, slave のどちらが落ちても影響を受けるために可用性が低下します。 2. 全体の性能がほとんど上がらない master 1台ですべてのクエリを処理する場合と比べて、可用性が落ちる引き換えとして見合った性能向上が得られるか、という

  • mod_pagespeed をちょっとだけ試してみた - 酒日記 はてな支店

    Google の Page Speed の Apache module 版 mod_pagespeed をインストールして、ちょっとだけ動きを見てみた。 インストールは Ubuntu に deb パッケージで。 $ wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-beta_current_amd64.deb # sudo dpkg -i mod-pagespeed-beta_current_amd64.debconfig はデフォルトで入るものそのまま。 <IfModule pagespeed_module> SetOutputFilter MOD_PAGESPEED_OUTPUT_FILTER ModPagespeed on ModPagespeedUrlPrefix "http://localhost/mod_p

    mod_pagespeed をちょっとだけ試してみた - 酒日記 はてな支店
    ikasam_a
    ikasam_a 2010/11/04
  • インフラ勉強会 qpstudy#2 で法定停電を乗り切るLTしてきた - 酒日記 はてな支店

    キユーピー3分インフラクッキング 第2回で、法定停電を乗り切る方法について LT をやりました。内容は要するに、発電機でサーバを動かしたよ!という話です。枠がビアバッシュのほうだったので、わりとこんなネタでもいいかなと… スライドはここにあげました ustream で動画も見られます。ありがとうございます。(喋ってる間、ゆらゆらしすぎでキモいですね自分。お酒入ってたので……) 以下補足です。 発電機はインバータ制御で、出力波形が正弦波になるやつを借りるべし (twitterでご指摘いただきました) 発表時のスライドは発電機を YAMAHA と言いつつ、画像はなぜか HONDA のやつだったので、入れ替えました ということで、主催者のたておか(@iara)さんをはじめ参加者の皆様、楽しい勉強会をありがとうございました!

    インフラ勉強会 qpstudy#2 で法定停電を乗り切るLTしてきた - 酒日記 はてな支店
    ikasam_a
    ikasam_a 2010/07/30
  • 標準出力や標準エラー出力を捕まえてテストする Test::Output / Capture::Tiny - 酒日記 はてな支店

    Perl で、あるコードが標準エラー出力に吐き出した内容をテストしたい場面がありました。 自分でまず思いついたのは STDERR を dup して保存しておいて、ファイルにリダイレクトして、元に戻して、というやりかた。これはこれで動くのですが面倒。こういう場合は Test::Output (や miyagawa さんに教えてもらった Capture::Tiny) が便利です。 Test::Output はこんな感じ。 std(out|err)_(is|isnt|like) といったテスト関数が使えるようになります。 use Test::Output; use Test::More; stderr_is { # STDERR になにか出力するコード } "STDERRの内容", "description"; stdout_like { # code } qr/regexp/, "descri

    標準出力や標準エラー出力を捕まえてテストする Test::Output / Capture::Tiny - 酒日記 はてな支店
  • YAPC::Asia 2009 で Lightning Talk をしてきました - 酒日記 はてな支店

    PerlSalesforce」という題で発表させて頂きました。 かなり詰め込んだので駆け足になってしまった感がありますが、スライドは http://labs.topicmaker.com/~fujiwara/yapc2009/ に置いておきます。カーソルキーの左右で捲れます。(今見たら Safari / Chrome で動かない…) 日の教訓 真面目なのは体のトークに応募せよ LT はネタに走れ ごもっともです。次回はそうします。 日は皆様お疲れさまでした。明日もよろしくお願いします!

    YAPC::Asia 2009 で Lightning Talk をしてきました - 酒日記 はてな支店
  • 演算子 | を overload して TT のフィルタみたいな記法を実装する - 酒日記 はてな支店

    TT (Template-Toolkit) で値にフィルタを掛ける時に [% value | replace('x','y') | uri | html %]みたいに書きますが、Text::MicroTemplate だと仮に replace(), uri() という関数を用意しても <?= uri( replace($value,'x','y') ) ?>こんな感じ。なんか読みにくい気がする。(まあ PHP だってそうだといえばそうなんだけど) <?= $value | replace('x','y') | uri ?>こんな風に書けたら素敵ですよね。ということでこんなのを書いてみた。 package Filter; use strict; require Exporter; our @ISA = qw/ Exporter /; our @EXPORT_OK = qw/ html uri

    演算子 | を overload して TT のフィルタみたいな記法を実装する - 酒日記 はてな支店
  • Perl で RTMP クライアントを書いてみた - 酒日記 はてな支店

    なんでそんなものを。まさか Perl で flash player を作ろうなどということは考えてなくて、単に Flash Media Server (うちにあるのは古い FCS-1.5 だけど) の死活監視をしたかった。 # exe 化した SWF を Windows XP で動かしてチェック、とかしてたんですが XP のほうがサーバよりはるかに安定しないもので Perl で RTMP ということなら Kamaitachi、ということで github で fork して Kamaitachi::Client を作ってみました。最初は別の名前空間にしようかとも思ったんだけど、やはり共通部分が多いので。 http://github.com/fujiwara/kamaitachi/tree/master 使い方。 コールバックを定義したクライアントを用意。 package MyClient;

    Perl で RTMP クライアントを書いてみた - 酒日記 はてな支店
  • DBI をバックエンドにした CouchDB みたいなの - 酒日記 はてな支店

    CouchDB は面白いのですが、Erlang で書かれた daemon を動かす必要があるので、環境によっては使いにくい。 ということで、Perl + DBI のみで似たような動作をするものを作ってみました。daemon じゃなくて、Perl から直接 DB を扱うライブラリです。 Coderepos に置きました。http://svn.coderepos.org/share/lang/perl/DBIx-CouchLike/trunk できることは単純。 (key => 任意の構造の hash ref) の CRUD CouchDB ぽい map / reduce 対応している DBD はとりあえず SQLite と PostgreSQL で。 CRUD use DBIx::CouchLike; use DBI; $dbh = DBI->connect("dbi:SQLite:dbna

    DBI をバックエンドにした CouchDB みたいなの - 酒日記 はてな支店
  • $c->uri_for の汚染 - 酒日記 はてな支店

    Bugtraq: WordPress XSS vulnerability in RSS Feed Generator を見て。 Catalyst でも $c->uri_for() で生成される文字列は、安全な文字列であると (なんとなく) 思い込んでいたらそうではないのだな。 <a href="[% c.uri_for('/') %]">みたいにエスケープしないで書くと、host 部分は $ENV{HTTP_HOST} (リクエストヘッダの Host:) から生成されることが多いので XSS が起きる。 これだと汚染された Host: を送ったクライアントにしか効かないような気がするんだけど、出力を Cache していると他のクライアントにも影響を及ぼせると。 まあ、出力はちゃんとエスケープしろ、という話だから目新しくはない。 $ GET -H 'Host:"><body onload=a

    $c->uri_for の汚染 - 酒日記 はてな支店
  • 1