サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
アメリカ大統領選
hide-k.hatenadiary.org
CasperJS は PhantomJS の機能を使って現在扱っているページに対して JS を差し込める。 var casper = require('casper').create({clientScripts: ['jquery-1.9.1.min.js']}); clientScripts にローカルの JQuery へのパスを指定する。phantom.incectJs() を使っているのでリモートのファイルは指定できない。 で、実際に使うには var url ='http://www.akb48.co.jp/'; var casper = require('casper').create({clientScripts: ['jquery-1.9.1.min.js']}); casper.start(url, function() { this.echo($(title).text(
Macで ab -c 1000 -n 10000 http://example.comとかすると socket: Too many open files (24)とか怒られる。 CentOSとかなら大丈夫なのに。 おもむろに ulimit -nとかしてファイルディスクリプタの制限値を見ると、Macは 256おふっ。 ちなみにCentOS 5.3だと1024 一時的に ulimit -n 1024で上げてやった。
if ($ua =~ /Android/) { if ($ua =~ /Mobile/) { $type = 'Android phone'; } else { $type = 'Android tablet'; } } elsif ($ua =~ /iPhone/) { $type = 'iPhone'; } elsif ($ua =~ /iPad/) { $type = 'iPad'; } http://googlewebmastercentral-ja.blogspot.com/2011/05/android.html
#!/usr/bin/env perl use strict; use warnings; use Benchmark qw(:all); use Cache::Memcached::Fast; my $mf = Cache::Memcached::Fast->new( { servers => ['127.0.0.1:2010'] } ); my $mfm = Cache::Memcached::Fast->new( { servers => ['127.0.0.1:11211'] } ); my @keys = map { 'x' . rand } 0 .. 10000; my $n = 100; cmpthese( $n => +{ 'KT(memcached) set' => sub { $mf->set( $_ => rand ) for @keys; }, 'Memcached
環境は以下の通り mac mini 2.66GHz 4GB RAM kyotocabinet 1.2.30 kyototycoon 0.9.18 KTをMemcachd pluginサポート起動 ktserver -plsv /usr/local/lib/ktplugservmemc.dylib -plex 'port=2010'ベンチを取ったコードはこんな感じ とりあえずsetのベンチ #!/usr/bin/env perl use strict; use warnings; use Benchmark qw(:all); use Cache::KyotoTycoon; use Cache::Memcached::Fast; my $kt = Cache::KyotoTycoon->new( host => '127.0.0.1', port => 1978 ); my $mf = Ca
QRコードを表示するだけの簡単なお仕事を大量にさばきたいって言われたので書いてみた。 use Imager::QRCode; use Plack::Request; my $qrcode = Imager::QRCode->new( size => 2, margin => 2, version => 1, level => 'M', casesensitive => 1, lightcolor => Imager::Color->new(255, 255, 255), darkcolor => Imager::Color->new(0, 0, 0), ); my $app = sub { my $req = Plack::Request->new(shift); my $url = $req->param('url') or return [400, ['Content-Type' =>
lighttpdを使ってるとログローテートにcronologをよく使うと風の噂でよく聞きます。 そんなcronologをそのまま32bit環境下で動かすとファイルサイズ2GBを超えて書き込めないですねーというありがたい説法をid:kazuhookuさんにしてもらいました。 要は32bitアプリケーションがopen(2)で2GBを超えるファイルにアクセスするためにはフラグとしてO_LARGEFILEを指定する必要があるのですが、2002-01-24で開発が止まっているcronologはその指定がないのでパッチを当ててやる必要があります。 --- src/cronolog.c.org 2010-02-23 00:49:18.000000000 +0900 +++ src/cronolog.c 2010-02-23 00:50:27.000000000 +0900 @@ -82,6 +82,8
http://developer.mixi.co.jp/appli/appli_mobile/lets_enjoy_making_mixiappmobile/process_flow mixiモバイルアプリはユーザーからのリクエストを一旦受け取ってアプリケーションサーバーへリクエストするという形をとっています。これ自体は色んな事情があるだろうから全然理解できるんだけど、何で2-legged OAuthを採用したんでしょうか? mixiモバイルアプリでの認可の仕組みはコンシュマーとプロバイダーが信頼関係があることとユーザーがアプリケーションをインストールした時点でコンシュマーに対してリソースへのアクセス権限を認めるという前提のちょっと乱暴なモデル。 省略されるのは コンシュマーからのRequest Token要求とプロバイダーによる発行 コンシュマーからのRequest Tokenへのサイン
ircで聞いたときはうまく説明できなかった&tokuhiromさん、Yappoさん、kazuhoさんに直接教えてもらったのでまとめとくなり。 Proxyサーバーを作ることになった。 こんな感じのやつ。 で、これの問題として対抗のサーバーの応答速度が遅い場合があってそこにProxyサーバーが引きずられる点がある。つまりクライアントからの毎コネクションが比較的長くなりがちなサーバーをいかに効率よく組むかという課題がある。 最初は勘違いして他のサーバーへの問い合わせの間に他のことをして全体の応答速度を速くする、つまり非同期化によるメリットを模索していたんだけど、1回の応答で他サーバーへの問い合わせがたくさんあるようなクローラーみたいなことをする場合はメリットがあるけど、基本的に1回の応答で他サーバーへの問い合わせは1回だし、コンテンツを持ってくる以外にも処理はあるけど、処理時間の多くはこの1回の
今は時間取れないのでポインタだけ。 Blog PSGI - Perl WSGI - bulknews.typepad.com http://d.hatena.ne.jp/tokuhirom/20090904/1252091316 PSGIまとめ - Angelos in Action - angelosグループ Googleグループ: psgi-plack Googleグループ FAQ/SPEC GitHub - miyagawa/psgi-specs: Moved to https://github.com/plack/psgi-specs FAQ PSGI protocol specification リファレンス実装 PSGIRef Plack WAFアダプター Catalyst::Engine::PSGI CGI::Application::PSGI(建設予定地)
SQLiteの追加/更新はトランザクションを使うと高速化に効果があるというのはよく効くので実際試してみました。 use strict; use warnings; use DBI; use Benchmark qw(:all); my $count = 100; my $loop = 100; cmpthese( $count, { commit_each_insert => \&commit_each_insert, commit_bulk_insert => \&commit_bulk_insert, } ); sub commit_each_insert { unlink('test1.db'); my $dbh = DBI->connect('dbi:SQLite:dbname=test1.db'); $dbh->do( "CREATE TABLE test (id int not
コードリファレンスのシリアライズとデシリアライズ use strict; use warnings; use YAML; use Data::Dumper; $Data::Dumper::Deparse = 1; { no warnings ('once'); $YAML::UseCode = 1; } my $obj = { hello => sub { print "hello\n"; }, name => "hoge", }; # serialize my $yaml = YAML::Dump($obj); warn $yaml; # deserialize my $obj2 = YAML::Load($yaml); warn Dumper $obj2; # call coderef $obj2->{hello}->(); $YAML::UseCode = 1で$YAML::Load
Standard C++ foo-bar.cpp #include <iostream> int main () { std::cout << "Hello World"; } $ gcc -o foo-bar foo-bar.cpp -lstdc++ $ foo-bar Hello Wolrd Devel::BindPP $ perl -MDevel::BindPP -e 'use Devel::BindPP::WriteFile()'foo-bar.cpp include <iostream> #include "bindpp.h" XS(xs_hello_world) { std::cout << "Hello World"; } extern "C" { XS(boot_Foo__Bar) { pl::BootstrapCtx bc; pl::Package pkg("Foo::B
http://marcus.nordaaker.com/2009/03/a-proper-trycatch-for-perl/ メモ 後で書く { package HTTPStatus; use Moose; has code => (is => 'rw', isa => 'Int', required => 1); __PACKAGE__->meta->make_immutable; } use strict; use warnings; use TryCatch; sub foo { my $code = shift; try { die HTTPStatus->new(code => $code); } catch (HTTPStatus $e where {$_->code >= 400 && $_->code < 500}) { return '4xx client error'
FAQにもあるけど、Moose::Objectも継承して->meta->new_objectを明示的に呼ぶことにより、delegationを使わないでNon-Mooseクラスを継承することもできる。 use strict; use warnings; { package Parent; sub new { my ($class, %args) = @_; bless {name => $args{name}}, $class; } } { package Child; use Moose; extends qw(Parent Moose::Object); no Moose; sub new { my $class = shift; my $obj = $class->SUPER::new(@_); return $class->meta->new_object( __INSTANCE__
Catalystがモダンかどうかは置いておいてCatalystのコンポーネントを書く時のお作法として 大昔は ... use base qw(Catalyst::Action); use NEXT; sub execute { my $self = shift; $self->NEXT::execute( @_ ); ... ちょっと前は ... use base qw(Catalyst::Action); use Class::C3; sub execute { my $self = shift; $self->next::method( @_ ); ... モダンなのは ... use base qw(Catalyst::Action); use MRO::Compat; sub execute { my $self = shift; $self->next::method( @_ )
追記:2009/02/19 場所変更になりました。 追記:2009/02/19 場所仮決めしました。2/19 15時までに出欠をはてブコメントで表明してください。なお人数が多い場合には渋谷の他の店なる可能性があります。 追記:2009/02/10 日程が変更になりました id:lestrratさん著、モダンPerl入門の出版を祝って飲み会をしようと思います。 名づけてモダンPerl入門出版パーティー。略してモダパー。 日時: 2008/2/20(金) 20:00 場所: 渋谷蛍の庭 http://r.tabelog.com/tokyo/A1303/A130301/13014548/ 飲み放題2時間制: 4500円「木村」で予約してます 参加予定者 lestrrat hidek typester ka2u mikihoshi download_takeshi charsbar lopnor
Ideas - O'Reilly Media modperlite PHPのようにファイルを置くだけで実行されてCGIより速くてmod_perlより簡単なapache moduleだそうです。去年からのCGI frameworkブームを補完する上でも試してみるっきゃないということで まずはソースの取得 svn co http://code.sixapart.com/svn/mod_perlite/trunk modperlite cd modperliteちなみにもうすぐgithubに移行されるようです。 コンパイルとインストールはapxsにパスを通して ./Build.PL ./Build ./Build installhttpd.confとかconf.d/modperlite.confとかに LoadModule perlite_module modules/mod_perlite.s
というわけで、Text::Hatenaに渡したらHTMLエスケープした上で整形するように継承してみた。 #!/usr/bin/perl use strict; use warnings; { package Text::Hatena::Escaped; use base qw(Text::Hatena); sub text_line { my $class = shift; my $text = shift->{items}->[2]; return $class->escape("$text\n"); } sub cdata { my $class = shift; my $items = shift->{items}; my $data = $items->[1]; $data = $class->escape($data); return "<$data>\n"; } sub pre
そのまま使っても簡単にCGIが書けるNanoAですが、プラグインを書くとアプリケーションのコード全体的が見通しよくなります。 単純なプラグインの例を見ていきます。 app/plugin/hello.pm package plugin::hello; use strict; use warnings; use utf8; use base qw(NanoA::Plugin); sub init_plugin { my ($klass, $controller) = @_; NanoA::register_hook($controller, 'prerun', \&_prerun); NanoA::register_hook($controller, 'postrun', \&_postrun); no strict 'refs'; no warnings 'redefine'; *{$con
http://hidek.sakura.ne.jp/wiki/nanoa.cgi/wiki/ mixiで認証してmarkdown syntaxなwikiっぽいもの作った。 TODO: ページ削除 validation(え パスワードプロテクト マイミク限定公開 ファイル添付 追記: githubに置きました GitHub - hidek/nanowiki: Wiki powered by NanoA
最近GitHubを使っているのですが、pushのたびにパスワード入力めんどうだからこのへん見てssh-agentを使ってパスワード入力を省くようにしてました。 が、keychainを使えばさらにログイン間で共有できるようになることを今さら知りました。 CentOSではrpmforgeからyumでインストールできます。 # yum install keychainで、.zshrcに /usr/bin/keychain $HOME/.ssh/id_rsa source $HOME/.keychain/$HOST-shとか書いておけば、ssh-agentが実行されていなかったら実行するし、されていたら自動的に使うようになってくれるので新しいシェルを上げるたびにssh-agentを上げて、パスワード入力して…といった作業から開放されます。
mod_perlでどのくらいメモリー使われてるかとか調べたかったのでApache2::Statusを使ってみた。 Shibuya.pmのLTにも含めようと思ったけど5分に押し込めるのは無理なのでここで公開。 テスト対象としてCGI::Applicationで package HelloWorld; use strict; use warnings; use base 'CGI::Application'; sub setup { my $self = shift; $self->start_mode('index'); $self->run_modes( ['index']); } sub index { "HelloWorld"; } 1; runスクリプトとして #!/usr/bin/perl use strict; use warnings; use lib './lib'; use
気が付いたらCentOSについてくるFTPクライアントがncftpからlftpになって、ぶーぶー文句を言いながらも使っていたのですが、今日とある作業でrsyncの使えないレンタルサーバーへのミラーリングで便利な機能を知りました。 lftpは-fオプションを渡すとバッチを起動できるというもので #!/usr/bin/lftp -f open lolipop mirror -Re -x .svn /home/hide/public_html/waf www/wafこれをファイルに保存して実行権限つけて実行すると、バッチ処理してくれるという。 すばらしい。
とりあえず、うちの環境でMakefile.PLに書いてなくて必要だったモジュール XML::Atom Log::Dispatch XML::Feed HTML::Scrubber Image::Info Text::Tags::Parser
先週id:kazuhookuさんとかid:yappoさんとかと飲みながら話してた中で出てた話題をおぼろげな記憶の中から掘り起こすてみた。 Perl Web Applicationを簡単に配布したい 極力Pure Perlにすることが求められる mod_perlに頼らないでそこそこのスピードが求められる そこでCGIな軽量WAF 美麗なWizard方式のインストーラが欲しい パッケージする時にインストーラも自動生成 言ってみればWindows Installerで.msiパッケージ作るような仕組み アプリケーションが依存しているモジュールも簡単にインストールさせたい パッケージする時に中で使っているCPANモジュールを自動的に探してextlib以下に押し込んでbundleさせる仕組 もしくはJapanizeのようなリポジトリを共有する仕組み(ちょっとよくわかってないけどYet Another
前代未聞のPerl軽量ウェブアプリケーションフレームワーク祭りの中、いかがお過ごしでしょうか? 紆余曲折があってこんなことを言ってたわりに何もしてないでぼーっとしている間に、腕に覚えのある兵達が我も我もと手を動かしてくれたので、申し訳なさ半分で懲りずにベンチマークを取ってみました。 http://d.hatena.ne.jp/tokuhirom/20081111/1226418572 NanoA というウェブアプリケーションフレームワークをかいてみた - kazuhoのメモ置き場 YappoLogs: Yacafi という軽量CGIフレームワーク書いたよ みんな基本的に軽量なフレームワークをうたっていて、開発効率よりも軽さや配布のしやすさを売りとしているので特に問題ないと思います。 比べたのは上の3つと モジュールを使わないcgi CGI.pmでヘッダ出力をするもの 軽量フレームワークの代
Mojoの遅さはたいした問題じゃありません - Charsbar::Note 現状では全面的におっしゃるとおり。反論する場所はどこにもありません。 そもそも、あそこまでの結論だと遅いからダメじゃん的に見えてしまったのは我ながらまずかったと思います。 一応mod_perl or FastCGIでのベンチも取るするつもりではいますが、確かに速度だけで測れるものではなく、開発効率なんかを考えるのが重要なのもごもっともです。 この辺は中途半端な結果を無責任に出してしまって申し訳ない。 で、何を考えてあんなことを始めたかっていうと、最近のTPF-J(仮)の活動とかで考えさせられる、「どこにリーチしたら効率よくPerlを広めることができるか」ってことです。 「Perlを広める」には「Perlを使う人の人口を増やす」が含まれているとと理解しているわけで、そのためには「Perlで飯が食べれる人が増える」、
仕事の都合上、素のCGIとCGI::ApplicationとCatalystと今話題のMojoでmod_perlなどを使わない素のcgiでベンチとった。 結論から言うとCGI下では - Requests per second: バージョン 素のCGI 60.54 [#/sec] (mean) - CGI.pm 19.56 [#/sec] (mean) 3.42 CGI::Application 16.20 [#/sec] (mean) 4.11 Mojo 6.40 [#/sec] (mean) 0.8009 Catalyst 3.29 [#/sec] (mean) 5.7015 って感じです。 見るとわかるとおりモジュールを使い始めた途端にパフォーマンスが劣化します。 Devel::Profilerでプロファイリングしてみると Total Elapsed Time = 0.020035 S
次のページ
このページを最初にブックマークしてみませんか?
『とほほのN88-BASIC日記』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く