タグ

ブックマーク / unknownplace.org (22)

  • TwilioのRedisによる決済サービスの障害、2つの原因 - unknownplace.org

    Twilio というサービスで決済サービスの障害があったらしいが、恐しいことにこのサービス、 決済情報をRedisで管理していたらしい、というのをRedis作者、antirez氏のblogで知った。 Twilio incident and Redis - Antirez weblog この件に関しては、Twilio自体も 調査報告 を出している。簡単にまとめるとこういう感じだ: TwilioではRedisを single-master, multi-slave なレプリケーション環境で使用している ネットワーク障害で一時的に master-slave 間の接続が切れたことにより、master-slave間のデータの再同期が発生 この再同期がすべてのslaveに対して同時に発生したため、masterの負荷が高くなり、結果決済サービスの障害が発生 この負荷を解決するためmasterを再起動する

    kwry
    kwry 2013/07/25
  • org-modeとblosxomでのサイト構築、あるいはorg-modeのススメ - unknownplace.org

    個人的には文書書くのは markdown-mode + outline-minor-mode で満足していたし、org-mode に手を出す気はあまりしてなかったのだけど、 Emacs界隈の情報を見ているとやっぱり便利そうなので、バージョン8.0が出る頃に試しに使ってみた。 そうしたら思った以上に便利で、結局今では、日々のメモ、原稿執筆、タスク管理など、いろいろなことをorg-modeでやるようになってしまった。 最初、org-modeに手を出しにくかった(出したくなかった)大きな理由は、編集環境がほぼEmacsだけに限られてしまうということがあった。 しかしこれは org-mode を使ってみると、org-mode があまりに高機能なので、他の環境に移植するのがつらいからだ、ということが分かった。 org-modeで文章を書く org-modeにはいろいろな機能・使い方があり、詳しくはi

  • MacBook Air セットアップメモ - unknownplace.org

    11インチのやつ、買いましたよ。よくあるセットアップメモを残す。 SSDの容量が心許ないので、バックアップからの復元はしないで新規で設定した。 OS 再インストール まずやっぱ最初はこれ。目的は大文字小文字を区別するファイルシステムでパーティションを切りなおすということのみ。 デフォルトのファイルシステムではWindowsなどとおなじように大文字小文字を区別しない。そういう環境ではたとえば #include <STDIO.h> とか言うコードも通ってしまう。そういう気がつかないうちに仕込まれる各種トラブルの種は気持ち悪いよね。 注意点としてはAdobe製のソフトはそういうトラブルの種を抱えたコーディングをされているらしいものが多いようで、このファイルシステムにすると動作しないものが結構あるらしい。たとえばPhotoshopは最新版でもうごかないみたい。 (Lightroomは大丈夫) ソフ

    kwry
    kwry 2013/06/04
  • Any::Moose とか幻想やったんや - unknownplace.org

    Any::Moose は Moose と Mouse のラッパーで、バックエンドがどちらになるかは use Any::Moose した時点で Moose or Mouse がロードされているかによって変わる。 どこかで use Moose していたら use Any::Moose は use Moose としてうごくし、 そうじゃない場合は use Mouse としてうごく。 これはなんのためにあるかというと、MouseとMooseの両方のモジュールを混ぜて使うと壊れるからなんだけど、 そもそも混ぜて使って問題になるのは Mouse のクラスを Moose で extends したりとか、そういう Moose 周りの機能を相互に使おうとした場合だけであって、混ぜて使っていてもそれぞれのクラスを普通に使い合う分にはなんの問題もない。 また、昔はruntimeの速度にそこまで性能差はなかったと

  • Redis布教活動報告 ISUCON 編 - unknownplace.org

    最近 Test::RedisServer とかもろもろつくっててばれてるかもしれませんが、だいぶ Redis 期にありまして、最近の趣味は?っていう問いにはだいたいRedisのソースを読むことですってなくらいなのですが、 memcached とかシンプルな KVS と比べるとだいぶ機能が豊富なので使い方を迷ったりとかそういう事例もあり、周りにもう少し使える人を増やさなければ僕の書いたコードが属人化しててつらい感じになるなーっていうわけで、 布教活動をおこなっておりまして、その一環として ISUCON2 に参加してきましたのでその報告です。 livedoor Techブログ : #isucon2 リアルタイムフォトレポート 更新終了 前回の優勝チームに混ぜてもらった感じでだいぶついてる感じもしますが、見事連覇を果たせ、懇親会でも redis redis と連呼してきたのでだいぶ興味持った方も

    kwry
    kwry 2012/11/07
  • Githubの各種イベント通知をPubSubHubbubで受け取るの巻 - unknownplace.org

    tl;dr - 通常のHookではなくPubSubHubbubのほうのHookを使えばGithubのすべてのイベントをひとつのWebHookで受け取ることができる。 Github の WebHook ではレポジトリの更新しか受け取れず、issue とかも受け取れたら便利なのになーと思いつつ API ドキュメントを見てみると Hook を API から登録したりすることができるようになっていた。 だがこれは所詮は Web から登録できる Hook をいじるもので、このリストにあるものしか登録できない。 また、それぞれの Hook について登録できるイベントはリストで定義されている物に制限されているようで、たとえば WebHook だと push イベントしか設定することはできないみたい。(API 経由でも設定できなかった) 一方、それとは別に用意されている PubSubHubbub の Ho

  • ユニバーサルバイナリ作成用シェルスクリプト - unknownplace.org

    iPhone用にビルドしたライブラリは実機用(armv6/armv7)とシミュレータ用(i386)のユニバーサルバイナリとして作成しておくと使い勝手が良いです。 その分ビルドは面倒になるのですが。。 僕は通常以下のようにしてユニバーサルバイナリを作成してます。 まずprefixをそれぞれ ~/dev/iphone/lib/curl-7.20.1-armv6 ~/dev/iphone/lib/curl-7.20.1-armv7 ~/dev/iphone/lib/curl-7.20.1-i386 などとしてそれぞれのアーキテクチャ用にビルドをする適当に書いた bundle.sh でユニバーサルバイナリ化 この bundle.sh は上の例だと ./bundle.sh ~/dev/iphone/lib/curl-7.20.1 として実行すると ~/dev/iphone/lib/curl-7.20

  • Text::MicroTemplate::DataSection - unknownplace.org

    __DATA__ に __DATA__ @@ index.mt <html> <body>Hello</body> </html> @@ bar.mt ? if ($true) { Foo ? } こう言うのが書いてあるとき、Data::Section::Simple を使うと get_data_section('index.mt'); とすることで該当セクションだけのデータを簡単に取得することができます。 なので普通の Text::MicroTemplate と組み合わせても render_mt(get_data_section('index.mt')); って感じで使えてそんなに苦じゃないわけですが、どうせなら中で include とか extends とかで他のセクションのデータとも連携できるようにしたら便利だなーと思い3分クッキングして Text::MicroTemplate::D

    kwry
    kwry 2010/07/03
  • PerlエンジニアのためのObjective-C Blocks入門 - unknownplace.org

    OS X 10.6 以降の xcode では Objective-C に Blocks というシンタックスが追加されている。 Blocks Programming Topics: Introduction Perl でいうところの無名関数(コードブロック)を作ることができる機能で、Perlでいうところの my $f = sub { ... }; $f->(); は void (^f)() = ^{ ... }; f(); のように書ける。書式がきもいのはObjective-Cの定めなのであきらめましょう。 より詳しい書式については上記ドキュメントを見ると良い。 しかしデフォルトではPerlのコードブロックとはレキシカル変数の扱いが異なる。 my $i = 0; my $f = sub { return $i + 1 }; $i++; $f->(); # 2 を返す perlではこのようにレ

  • qpsmtpd を Server::Starter 化するなど - unknownplace.org

    Perl 製 SMTP サーバーとして qpsmtpd というものがあり、僕もいろいろなところで利用している。主な用途としてはメール連動の Web アプリケーションのメール機能の部分。実際のメール配送などでは使用してない。 フロントに qpsmtpd を置き、アプリで制御する宛先の場合のみ qpsmtpd からジョブキューに流したりする。 それ以外の通常のメールは queue/postfix プラグインなどを使用して裏側の postfix にまかせちゃう。というような使い方をしている。 qpsmtpd 自体は apache.org や perl.org の SMTP として採用されており、パフォーマンスに関しては問題ないのだが、プラグインを書き換えたり設定を変更したりした場合に再起動が必要になるところが、フロントに立てるサーバーとしては不安な部分であった。 なので前々から Server::

  • GNU screen の裏にいる Window で完了したコマンドを Growl 通知したい - unknownplace.org

    というようなことをつぶやいていたら、 Twitter / hchbaw: @typester 最近になって screen -Q windows とできるようになってますね。 と教えていただいた。 -Q コマンドというのは -X と同じようなものだけど、コマンド結果を screen 内のステータス領域ではなく標準出力で得ることができる。また、-X はつねに実行時にそれ自体がアクティブな screen セッションになるのに対し -Q はアクティブなセッションにクエリを投げる感じで、セッションが切り替わらない。(この辺は理解が怪しいので突っ込み歓迎) それでそれを使うと screen -Q windows と実行することで :windows で echo されるのとおなじ文字列を標準出力で得ることができる。その出力をパースすれば、自分が screen の裏にいるかどうか判断することができるという

  • yokohama.pm tech talk #5 - unknownplace.org

    OpenSocial なモバイルアプリを書く場合、アプリ単体でテストできるようにしてくれる Moxy の OpenSocial プラグインの話と、外部 API 呼び出しを専用に行う非同期なプロクシサーバーの話をしました。 資料はこちら: OpenSocial mobile application development 前者に関しては、個人的には OpenSocial モバイルアプリ開発には必須なツールなので良い感じにしていきたいところ。 &してくれるひと募集。 後者のプロクシサーバーは「あんまり頭よくない」だけれども、現在のウェブアプリケーションの構成で、API呼び出しの待ち時間をうまく使おうとするときにはこうなるのかなぁと思った。同じようなことをしているところもあるらしい! 個人的にはそれ〜でできるよ!ってのがないかなーと思っていたのだけど、ないっぽいのかなー。 nginx でおしいと

  • local::lib を切り替える - unknownplace.org

    レガシーなアプリをメンテするのにレガシーな Perl モジュールが必要になることがあり、そのために古いアプリ用には専用の local::lib ディレクトリを切っているわけですが、普段から日常的に local::lib を使用しているため shell が上がったタイミングではデフォルトの local::lib 環境変数がセットされていて切り替えが非常に面倒だった。 これまではそれほど頻繁に使用しなかったので放置していたのだが、ここのところ頻繁に必要になるためいい加減うざくなってきて簡単に local::lib を切り替えられるよう設定をしてみた。 zsh に次のような関数をつくり、それで local::lib を切り替えるようにする。 function locallib () { INSTALL_BASE=$1 if [ -d $INSTALL_BASE ]; then eval $(~/

  • 2009/06/25 - memo - unknownplace.org

    最近は Text::MicroTemplate (TMT) をよく利用するようになったのですが、使用するにつれ不満なところが出てきたのでそれを解決するために少し拡張してみました。 実際には拡張したのは Text::MicroTemplate ではなく、Text::MicroTemplate::File です。 http://github.com/typester/text-microtemplate-extended-perl/tree/master 現在二つの機能を追加してあるのでそれを以下にまとめておきます。 テンプレートの継承機能を追加 テンプレートを分割するような規模になってくると現状の TMT では <?=r $self->render_file('header.mt') ?> ここにコンテンツ <?=r $self->render_file('footer.mt') ?> など

  • unknownplace.org - 2009/06/17 - lighttpd だけで多言語サイトを作る方法

    lighttpd 1.4.21 以上では $HTTP["language"] という新しい変数(?)が設定の中で使えるようになり、これを使用するとクライアントの Accept-Language に応じて lighttpd の設定を変えることが可能になります。 これを利用して多言語化しているサイトとしては opensource.kayac.com が有名です。 このサイトは以下のような設定で動作しております。 $HTTP["url"] !~ "^/(?:(?:css|js|img|images?|static|tmp)/|[^/]+\.[^/]+$)" { $HTTP["url"] !~ "^/(en|ja)(?:$|/)" { $HTTP["language"] =~ "(en|ja)" { url.redirect = ( "^/(.*)" => "/%1/$1" ) } $HTTP["

  • 2009/04/20 - memo - unknownplace.org

    もう4回目か。。 qudo x skinny (id:nekokak) qudo はクドーと読む。キュードーだと思ってた!(& キュードーのが良いなぁ) Skinny は前回(?)も発表したORMSQL::Parser がしょぼい&遅いので捨て、ルールベースにしたとのこと。 それはいいんだけど、DSL まくっててちょっと個人的にはやだなぁ。DSL は覚えるのが大変。DSLは ::Declare とかで別途やって欲しい感じ。どちらでも使えるのがいいと思います! 現状は一部足りないところもあるけど、だいたいのところ(id:nekokakさんが普段使う領域)はうごくレベルらしい。 Qudo は TheSchwartz みたいなジョブキュー。TheSchwartz の不満なところを直して、欲しかった物をつけた感じの物。 ORM に依存しないDB 以外にも memcached とかキャッシュサーバ

    kwry
    kwry 2009/04/20
  • unknownplace.org - 2007/12/21 - こうしたいflymake

    Emacs で JavaScript のシンタックスエラーを検出する これ読んですぐ導入したflymake。上記サイトのを少し改造したらperlでもできたのでいまはjsとperlでリアルタイムでシンタックスエラーチェックができている。 僕はすごくtypoがおおいと思うのだけどこれを導入してからtypoではまることがずいぶん減った。もうないとこまるelispのひとつになってる。 ちなみにperl版はこんな感じにしている。 (require 'flymake) ;; flymake for perl (defvar flymake-perl-err-line-patterns '(("\\(.*\\) at \\([^ \n]+\\) line \\([0-9]+\\)[,.\n]" 2 3 nil 1))) (defconst flymake-allowed-perl-file-name-m

  • 2006/05/19 - memo - unknownplace.org

    同僚が DBIC で、 select * from table where column1 > column2; みたいのを実行したいけどどうやるかわからんとかいっていて、オレもわからなかったので IRC で聞いたらすぐ解決した。 $rs->search({ column1 => \'> column2' }); SQL::Abstract の機能。しらなかった。 これ他にもいろいろつかえるね。DBIC の機能というわけではないから CDBI::Sweet とかでもOKか。

    kwry
    kwry 2009/03/16
  • 2006/04/10 - memo - unknownplace.org

    PACKAGE->inflate_column( query => { inflate => sub { my $u = URI->new; $u->query(shift); my $ret = {}; for my $k ( $u->query_param ) { my @v = $u->query_param($k); $ret->{$k} = @v > 1 ? [@v] : $v[0]; } $ret; }, deflate => sub { my $utf8off = sub { my $str = shift; utf8::encode($str) if utf8::is_utf8($str); }; my $hash = shift; for ( keys %$hash ) { if ( ref $hash->{$_} eq 'ARRAY' ) { $utf8off->($_

    kwry
    kwry 2009/01/13
  • DBIx::Class::Cursor::CachedつかってみたCommentsAdd Star - unknownplace.org - 2007/12/20

    舌足らずすぎた。 Model::DBIC: connect_info: - dbi:mysql:table - root - on_connect_do: - SET NAMES utf8 cursor_class: DBIx::Class::Cursor::Cached cache_file: __path_to(tmp/query_cache)__ さっきはこんなconfigで使った場合のコードです。 すばらしすぎる。もっと早く使えばよかったとおもった。 Catalyst::Model::DBIC::Schema で使う場合はこんな感じでOK。 sub new { my $self = shift->NEXT::new(@_); my $cache = Cache::FastMmap->new( share_file => $self->{cache_file} ); $self->s

    kwry
    kwry 2008/12/20