タグ

ブックマーク / hirafoo.hatenablog.com (23)

  • 自分は自分が駄目だと思っているけどそれ以上に駄目だという話 - だるろぐ

    友達と話してきて、色々説教らったのでそのことについて。 自分には感謝の気持ちがたりない まず、仕事があって当然ではない。 会社は賃金を払って俺を雇っている。自分は働いたら賃金をもらえる。 「働いたら金をもらえる」というのはごく当たり前のことだと思っていた。 が。 「金を得る」のは簡単でも、「金を産む」のはとても大変だ。 勝手に無から金が生まれるわけはない。自分が身一つで金を生み出すとなると、会社を作るにしても、設立、資金、労力の確保、時間、そもそも設けるための仕組みの考案、調査など、色々なものが必要になり、また成功しなかったら、というリスクまで背負う。言うまでも無くそれは大変なことだ。 会社というのはそれら全てが既に終わっている。また、会社が倒産したとしても、自分にリスクは一切無い。次の会社を探せばいいだけである。 自分はノーリスクで、「働けば金を得られる」という仕組みに参加させてもらっ

    自分は自分が駄目だと思っているけどそれ以上に駄目だという話 - だるろぐ
  • 例えば複数のpsgiをplackupするときにforkを使う - だるろぐ

    ※この記事は自力ではありません 1つのアプリの中で複数の.psgiをplackupしたいときがある。 そんなとき、 複数ターミナルを立ち上げてplackup screenで複数ウィンドウ などの手段で1個1個コマンド打ってもいい、のだけど、例えばforkでこんなことを。 今回は5000番と5001番を使う簡単なpsgiを例に取る。 psgi # 5000.psgi return sub { return [ '200', [ 'Content-Type' => 'text/plain' ], [ "port: 5000" ], ]; }; # 5001.psgi return sub { return [ '200', [ 'Content-Type' => 'text/plain' ], [ "port: 5001" ], ]; }; 打ちたいコマンド % plackup 5000.ps

    例えば複数のpsgiをplackupするときにforkを使う - だるろぐ
  • 3000req / sec と戦う - だるろぐ

    ざっくり概要 ピークで3000req / sec 毎分コンテンツ更新要求 コンテンツ更新の際は他所からデータをapi経由で受け取る コンテンツ更新にはTheSchwartzを使用 なコンテンツを色々してきたログ。 尚、ここに書く技術は大半が周囲のギークな方々にサポートしてもらったもので、僕自身が何かしたわけではない。残念すぎる。 構成 internet -> www(squid -> apache) -> app(memcached -> app) -> db フロントエンド wwwサーバがapacheとsquidを動かしている。apacheがリクエストを受け、squidのキャッシュが有ればそれを返し、無ければバックエンドのappサーバへproxy。 バックエンド appサーバがmemcachedとアプリを動かしている。 それぞれ冗長化してるけど、リクエスト数の割に台数は少ない。 技術があ

    3000req / sec と戦う - だるろぐ
  • パフォーマンスグラフの見方とか - だるろぐ

    (追記:このエントリは自力ではありません) CloudForecast というリソース管理ツールがあります。 色々見られるのはいいんですが、[よく分からん|知らん|勘違いしている]項目ばかりなので解説のようなものを。 Traffic Throughput 転送量。 Inbound 外部から受けたリクエスト。webサーバやproxyサーバの場合、主に、というか基的にユーザからのリクエスト。 Outbound 外部へ返すレスポンス。 なお、In/Out両方とも、単純に サーバ <*> ユーザ の間でやりとりしているデータ量より多い量がグラフで見える。 例えばInboundの場合、リクエスト受けて、バックエンドにproxyして結果を受け取ってユーザに返す、とかするから。 Basic system psとかstatとかで見られるアレ。 Load Average コア数を考慮して見る。値が1でも、

    パフォーマンスグラフの見方とか - だるろぐ
  • vundleで管理できないプラグインはどうしよう - だるろぐ

    vundle便利ですね。 ところでインストールでさ ドキュメントには .vimrc にこう書け、とあるのだけど set rtp+=~/.vim/vundle.git/ 俺の場合はこうしている。 set rtp+=~/.vim/vundle/まあどっちでもいいけど。 で、題。 vundleで管理できないプラグインは ~/.vim/plugin に突っ込むしかないのだろうか。 そもそも管理できないのってどんなのかというと BundleSearchに存在しないやつ たとえば個人で作ってその辺にアップしてるだけで、 www.vim.org に無いもの。 もしくはkaoriyaに付属のdicwin.vimみたいなの。 どうしようもない。 プラグイン体に手を加える必要があるもの バグがあったり挙動を変えたかったり。 http://subtech.g.hatena.ne.jp/cho45/20071

    vundleで管理できないプラグインはどうしよう - だるろぐ
  • さっき書いた「use if $COND, MODULE」が間違ってたのでもう一度 - だるろぐ

    http://d.hatena.ne.jp/hirafoo/20110529/1306600000 を書いたら即行でxaicronさんからコメントを頂いた。 自分は use ifのifをビルトイン関数のifだと思ったけど、ビルトイン関数のifはこんな使い方はできない。後置ifは使えるけど。 で、教わったとおり if.pm を見る。 package if; $VERSION = '0.05'; sub work { my $method = shift() ? 'import' : 'unimport'; die "Too few arguments to `use if' (some code returning an empty list in list context?)" unless @_ >= 2; return unless shift; # CONDITION my $p =

    さっき書いた「use if $COND, MODULE」が間違ってたのでもう一度 - だるろぐ
    hisaichi5518
    hisaichi5518 2011/05/29
    知らなかった!!!!
  • use if $COND, MODULE - だるろぐ

    http://d.hatena.ne.jp/gfx/20110528/1306594596 で、 use if __FILE__ eq $0, 'Smart::Comments'; と、見慣れないuseの使い方をしてるのが気になって perldoc -f use したけど分からないので perldoc.jp 見たら載っていた。 http://perldoc.jp/func/use 少なくともperl5.12のドキュメントには載っているようだ。 手元の環境は5.8.8で、ドキュメントには載って無くてもこの機能は使えた。

    use if $COND, MODULE - だるろぐ
  • perldoc -v '$$' が見れない人は Pod::Perldoc を3.15にするといいよ - だるろぐ

    3.15のChangeLogから抜粋。 * summary of main changes: - perldoc -v PerlVarクォートでくくるのが非常にめんどくさい。

    perldoc -v '$$' が見れない人は Pod::Perldoc を3.15にするといいよ - だるろぐ
  • perlは見た目が重要という話 - だるろぐ

    突然ですが以下の実行結果を予測してください。ついでに実行結果と照らし合わせてみてください。 % perl -le 'print 3 ** 2' % perl -le 'print (1+2) ** 2' % perl -le 'print (3) ** 2' 見ただけでオチが分かりましたが何か? → 尊敬させてください 予想通りでしたが何か? → 尊敬させてください 何これ分かんないけど自分で調べるからいいや → さようなら 何これ教えろ → 下に進む 実行結果 こうなる。 % perl -le 'print 3 ** 2' 9 % perl -le 'print (1+2) ** 2' 3 % perl -le 'print (3) ** 2' 3 解説 perlは先の3つの例は、それぞれ以下のように解釈・実行する。 % perl -le 'print 3 ** 2'3 ** 2 を行っ

    perlは見た目が重要という話 - だるろぐ
  • limit/offsetについて考える - だるろぐ

    LIMIT 20 OFFSET (:page - 1) * 20 みたいなクエリは :page に大きい値が入れれるように設計されてるとクエリに殺されるので、 WHERE key = :offset_for_next_page LIMIT 20 なクエリになるよう設計してほしい。 http://twitter.com/kamipo/status/56304601049210880 俺もボスに教わるまで知らなかったのだが、 mysql> select id from mentions order by id asc limit 100, 10;がすることは、 データを10個だけfetchする ではなく、 110個データをfetchして、先頭から100個捨てる だ。何を今更って感じですよねー知ったのは10ヶ月ほど前でした。俺の未熟さを思い知れ。 で。このようにlimitを付けてデータを取得する

    limit/offsetについて考える - だるろぐ
  • Gearmanのサンプルを書いた - だるろぐ

    perlでキューイングするにはGearmanかTheSchwartzを用いるのが主流。 何となくGearmanのサンプルを書いた。 GitHub - hirafoo/queuing_sample 何はともあれモジュールを入れる。 # cpanm Gearman::Server Gearman::Client Gearman::Worker プロセス管理 キューイングを使う理由は「重い処理を裏に投げたい」もしくは「それ専用のプロセスが他に居て、そいつに仕事を投げて結果だけもらいたい」というのが主。 gearmanはキューイングはしてくれるが、プロセス管理まではしてくれないので自力でする必要がある。 キューイングするときは大抵重い処理だったり一気に沢山リクエスト来る場合なので、あらかじめforkしておくべし。 ここに素敵な例があるのでパクるといいと思います。僕はパクらせていただきました。 ht

    Gearmanのサンプルを書いた - だるろぐ
  • PlackとText::Xslateでケータイからtwitterするwebアプリを書いた - だるろぐ

    公式のケータイ用のサイトが重いし落ちてる事が多いのでさっさと書いた。 色々足りんけど自分用に使うにはこれで十分。 GitHub - hirafoo/filmoa: simple twitter web-app for mobile phone なおPlackとText::Xslate使ったとか書くと凄く聞こえるけど実際は触り程度にしか使ってない。 追記 Config::Pitでconsumer keyとかtwitterでoauthするときに必要な情報を管理してます。 当然そんなものリポジトリに同梱しないしサンプル書くのもめどいので、これを使いたい珍しい人はコード読んで自分で用意するよろし。簡単だから。 構成 psgiファイルが1個と、他はテンプレのファイルのみ。 何か軽くてさくっと使えるWAF無いかなーと探したけどいいのがsinatraしか無かった。 やりたい事は極わずかだったので、んじゃ

    PlackとText::Xslateでケータイからtwitterするwebアプリを書いた - だるろぐ
  • モバイルサイト作成tips - だるろぐ

    メモとかおさらいとか覚え書きとか。 キャリアごとの特徴 docomo css読めない、guid面倒、クッキーえない 今更すぎるお約束。新しい方の機種では改善されてるのもあるからってそれがどうした リダイレクトさせるとき、ステータスコードが301じゃないと「ページが移動しました」とかダイアログが出る 極たまにX-DCMGUIDを送信しない設定にしている人が居る。そういう人は大抵その事を忘却していて、見当違いの行動を起こす au 異常にキャッシュが強い cache-control, pragmaヘッダで色々指定して頑張る tableタグの入れ子が使えない そもこれがhtmlとして正しいのかは知らないけど softbank 唯一utf8で問題が無い。公式宣言するだけはある(してたっけ) docomoも公式にutf8使えますよーとか言ってた気もするが却下。理由は後述 とにかく電波が弱い 経験上、

    モバイルサイト作成tips - だるろぐ
  • AUTOLOADって遅いんじゃね?と思ったけど - だるろぐ

    use strict; use warnings; use Benchmark qw/:all/; our $AUTOLOAD; foo(); bar(); cmpthese( timethese(0, { normal => sub { normal() }, autoload => sub { autoload() }, }) ); sub call_foo { -foo } sub call_bar { -bar } sub normal { call_foo() eq -foo or die; call_bar() eq -bar or die; } sub cache_autoload { my $value = shift; my $name = (split(/::/, $value))[-1]; no strict "refs"; *{"main::$name"} = su

    AUTOLOADって遅いんじゃね?と思ったけど - だるろぐ
  • 配列の要素の最後のカンマ - だるろぐ

    perlでは @hoge = (1,2,); みたいに、配列の最後にカンマを付けてもエラーにならない。むしろ付けろやーってな規約もあるとかないとか。 まあperlの場合は有っても無くても何も変わらないのだけど、javascriptだと話が違ってくる。 var hoge = [1,2,]; document.write(hoge.length); さあ踏んでみよう。 firefox 2 chrome 2 ie(都合と事情によりバージョンは6) 3 IE(笑)

    配列の要素の最後のカンマ - だるろぐ
  • クエリの無駄とかチューニングとか - だるろぐ

    mysqlとかのRDBMSってノリと雰囲気と勢いで使ってるので つまりよく知らずに使ってます。 1件取得 例えばこんなスキーマから mysql> desc guest2site; +------------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+----------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | guest_id | int(11) | YES | MUL | NULL | | | site_id | int(11) | YES | MUL |

    クエリの無駄とかチューニングとか - だるろぐ
  • rubyの obj.methods がperlにも欲しい - だるろぐ

    以前 メソッドの一覧を取得する - だるろぐ とかやったんだけど、rubyの p obj.methods みたいにしたい。ので package Foo; use strict; use warnings; sub new { bless {}, shift } sub hoge {} sub foo {} my $var_my = 1; our $var_our = 3; package UNIVERSAL::methods; use strict; use warnings; sub UNIVERSAL::methods { my $self = shift; my $class = ref $self; my @methods; no strict "refs"; while (my ($key, $value) = each %{"$class\::"}) { not defined

    rubyの obj.methods がperlにも欲しい - だるろぐ
  • FormValidator::Lite でBETWEEN - だるろぐ

    FormValidator::SimpleにはBETWEENというルールがある。やる事はそのまんま、値が範囲内に収まっているかを見る。 でFormValidator::Liteでもこれをやりたく。 package FormValidator::Lite::Constraint::Between; use FormValidator::Lite::Constraint; rule 'BETWEEN' => sub { my $data = shift; my ($size, $min, $max) = ($data->[0], $data->[1], $data->[2]); unless (defined($size) && $size =~ /^\d+$/ && defined($min) && $min =~ /^\d+$/ && defined($max) && $max =~ /^

    FormValidator::Lite でBETWEEN - だるろぐ
  • +shift とか -hoge とか - だるろぐ

    perlで + とか - の、プラスとかマイナスの記号は加算・減算以外にも使えるんだけど +{}は無名ハッシュの宣言っていうソースはperldoc -f mapにあった - だるろぐ跡地 my $s = -hoge; - だるろぐ また知った。 use strict; use warnings; sub say {print @_, "\n"} my %h = ( hoge => '_hoge', shift => '_shift', -shift => '_shift_minus', ); sub f1 { say $h{shift} } sub f2 { say $h{+shift} } sub f3 { say $h{-shift} } f1("hoge"); f2("hoge"); f3("hoge"); % perl kigou.pl _shift _hoge _shift_mi

    +shift とか -hoge とか - だるろぐ
  • my $s = -hoge; - だるろぐ

    また一つ知った。 use strict; use warnings; sub say {print @_, "\n"} my $s; $s= -hoge; say $s; $s= -+hoge; say $s; $s= -+-hoge; say $s; $s= -+-+hoge; say $s; % perl t.pl -hoge -hoge +hoge +hogeハイフン付きの裸の文字列。しかも+を付けると変わる。何でクォートしないのに通るのか。 use Test::Base -Base; のように、useの第二引数に取れる事は知っていたが、変数宣言にも使えるのは知らなかった。そもそもuseの場合も何で使えてるのか分かってない。 全然分からなかったので某黒帯柔道家に質問。またか。 解 % perldoc perlop Symbolic Unary Operators Unary "!"

    my $s = -hoge; - だるろぐ
    hisaichi5518
    hisaichi5518 2010/04/20
    知らなかった。