だるろぐ

だるいぶろぐです

perl

Net::Google::Analytics::OAuth2 で google analytics api を叩こうとしたら refresh token が取得できなかった

google analytics には api*1 がある。 認証・認可には oauth2 を使う。authsub というのもあるみたいだけどどうやらこれから使うなら oauth2 使っとく方がいいらしい。 api を叩くための各種ライブラリ*2もある。 おいおい perl 無いじゃねーか、と思うと、…

Term::ANSIColorでターミナルに色付きで出力する

色々できるけど単純に color と colored だけ使って不便は無い。 use strict; use warnings; use Term::ANSIColor qw/colored/; for my $c (qw/black red green yellow blue magenta cyan white/) { print colored(["$c"], "$c\t"); print colored(["bright_…

perlbrew と CloudForecast を動かす

環境 % cat /etc/redhat-release CentOS release 6.3 (Final)vim zsh screen あたりは入れておく。 perlbrew まずは拾ってくる。 curl -kL http://install.perlbrew.pl | bashそして使うためのファイルを読む設定。確か上記の作業後に指示された気がする。 e…

TemplateのIF〜ELSE〜ENDを1行で書く

[% IF (loop.count % 2); 'foo'; ELSE; "bar"; END %]知らなかった。

cpanモジュールにサンプルアプリなどを添付するときは no_index directory を指定する

例えばこのように。この場合は eg ディレクトリ以下にサンプルアプリが入っている。 http://cpansearch.perl.org/src/TOKUHIROM/Amon2-3.35/Makefile.PL no_index directory => 'eg'; こうしないと、サンプルアプリの中で MyApp みたいな名前空間を使ったと…

Pickles::Dispatcher::Auto というモジュールを書いた

https://github.com/hirafoo/p5-Pickles-Dispatcher-Auto Pickles というwafがあって、これの dispatcher はルーティングを記述したファイルが必須で、コントローラに定義されたアクションはこれに書かないといけない。 コントローラに100個アクションがある…

perlでメール送信するときにenvelope-fromを指定する

envelope-fromって何ぞ ggrks MIME::Lite http://en.yummy.stripper.jp/?eid=478221#comments $msg->send( 'sendmail', FromSender => 'error@example.com', ); Email::Sender http://d.hatena.ne.jp/hogem/20110312/1300524443 my $sender = 'sender@exampl…

例えば複数のpsgiをplackupするときにforkを使う

※この記事は自力ではありません 1つのアプリの中で複数の.psgiをplackupしたいときがある。 そんなとき、 複数ターミナルを立ち上げてplackup screenで複数ウィンドウ などの手段で1個1個コマンド打ってもいい、のだけど、例えばforkでこんなことを。 今回は…

cronやdaemontoolsで標準パス以外に置いてあるperlを使うなど

perlbrewを使っている場合など、PATHに含まれていないコマンドをcrontabやrunで使うとき自分はこうしてる。 変数で定義 PERL5LIB=/path/to/my/lib myperl=/path/to/my/perl $myperl /path/to/app.pl PATHの先頭にpath追加 PERL5LIB=/path/to/my/lib export P…

例えばオブジェクトを毎回生成するんじゃなくて一度作って使いまわす

例えば MyApp::Memcached みたいなのがあったとして、 get/set する度にいちいちnewするより一度newしたのをシングルトンとかで保持して使いまわした方がいいよねーと思って 一度だけnewしたのを使いまわす ||= でいわゆるシングルトンみたいな per request…

3000req / sec と戦う

ざっくり概要 ピークで3000req / sec 毎分コンテンツ更新要求 コンテンツ更新の際は他所からデータをapi経由で受け取る コンテンツ更新にはTheSchwartzを使用 なコンテンツを色々してきたログ。 尚、ここに書く技術は大半が周囲のギークな方々にサポートして…

さっき書いた「use if $COND, MODULE」が間違ってたのでもう一度

http://d.hatena.ne.jp/hirafoo/20110529/1306600000 を書いたら即行でxaicronさんからコメントを頂いた。 自分は use ifのifをビルトイン関数のifだと思ったけど、ビルトイン関数のifはこんな使い方はできない。後置ifは使えるけど。 で、教わったとおり if…

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 少…

perldoc -v '$$' が見れない人は Pod::Perldoc を3.15にするといいよ

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

スマートフォン向けサイトでよく見る「もっと見る」を押す度に延々と下にスクロールしていくアレをlyase_viewで楽に実装する

twitterとかgmailとかでやってる、一番下までスクロールすると「もっと見る」みたいなリンクがあって、それをクリックすると下にもっと広がるアレ。 やってることは、クリックされるたびにjavascriptで データを用意する テンプレートを用意する テンプレー…

perlを学ぶ人に薦めたい本

http://d.hatena.ne.jp/gfx/20110505/1304603785 を読んで、自分が読んで良かったと思っている本を1冊挙げようと思った。 Effective Perl http://www.google.co.jp/search?q=effective+perl この本は古い。amazonによれば1999/03が発売日らしい。PlackだのCa…

perlでサイトマップとサイトマップインデックスを作る

WWW::Sitemap::XML と WWW::SitemapIndex::XML を使う。 準備 libxml2 を入れておく % sudo yum install libxml2-develモジュールのインストールでコケたら MooseX::Types のバージョンが古いかもしれないので最新にするなど code use strict; use warnings;…

perlは見た目が重要という話

突然ですが以下の実行結果を予測してください。ついでに実行結果と照らし合わせてみてください。 % perl -le 'print 3 ** 2' % perl -le 'print (1+2) ** 2' % perl -le 'print (3) ** 2' 見ただけでオチが分かりましたが何か? → 尊敬させてください 予想通…

Image::Magickで画像を重ね合わせる

何に使うのやら。 giflib-devel とかのライブラリを入れておくのも忘れずに。 #各インスタンス生成 my ($img_down, $img_up_jpg, $img_up_gif) = (Image::Magick->new, Image::Magick->new, Image::Magick->new); $img_down->Read("path/to/down_image"); $i…

picklesのプラグインとか

http://d.hatena.ne.jp/hirafoo/20110112/1294766695 ではdispatcherを1個書いたけど、プラグイン2個増やしたのでどーせならまとめてしまえと。 大したことは書いてない。 そもそもFillInFormLiteの方は動いたけどEncodeCachedはutf8以外見てないっていう。G…

Pickles-Dispatcher-Auto とか書き始めた

20110119追記 移行。以下参照。 http://d.hatena.ne.jp/hirafoo/20110119/1295444740 https://github.com/hirafoo/Pickles-Dispatcher-Autopicklesというwafの標準のdispatcherは各アクションにルーティングを割り当てなければいけない。 つまりアクションが…

「TheSchwartzのサンプルも書いた」でmasterにmergeしてなかった

TheSchwartzのサンプルも書いた - だるろぐ で、ブランチでTheSchwartzやってたんだけど、それをmasterにマージしてなかった、ただそれだけ。 小ネタ ジョブの中で open my $fh, ">>", "hoge" or die $!; for (1..10) { $fh->print("$_ time"); sleep 1; } c…

TheSchwartzのサンプルも書いた

http://d.hatena.ne.jp/hirafoo/20101205/1291562525 のGearmanサンプルに続いてTheSchwartzのサンプル。 GitHub - hirafoo/queuing_sample TheSchwartzとは キューイングの実装の一つ。Gearmanは全てがオンメモリだけどTheSchwartzはサーバにデータベースを…

Gearmanのサンプルを書いた

perlでキューイングするにはGearmanかTheSchwartzを用いるのが主流。 何となくGearmanのサンプルを書いた。 GitHub - hirafoo/queuing_sample何はともあれモジュールを入れる。 # cpanm Gearman::Server Gearman::Client Gearman::Worker プロセス管理 キュ…

PlackとText::Xslateでケータイからtwitterするwebアプリを書いた

公式のケータイ用のサイトが重いし落ちてる事が多いのでさっさと書いた。 色々足りんけど自分用に使うにはこれで十分。 GitHub - hirafoo/filmoa: simple twitter web-app for mobile phone なおPlackとText::Xslate使ったとか書くと凄く聞こえるけど実際は…

perlのスコープはブロック or ファイルなのだろうか

ふとした拍子につまづいた。 以下を1個のファイル、例えば t.pl にでも書いて実行する。 package Hoge; use strict; use warnings; my $h = 1; package main; use strict; use warnings; my $h = 2; warn $h; さあ実行結果を予測しよう。 実行結果 % perl t.…

javascript入門中

こんばんはjavascript1年生です。 何か数ヶ月前にも似たような事やってた気がするけど気のせいということにする。 server.psgi use strict; use warnings; use Text::Xslate; use Plack::Builder; use Path::Class; use Encode qw/encode_utf8/; use JSON::X…

Plack::App::CGIBin から Plack::App::URLMap へ

前回Plack::App::CGIBinを使ったのだけど、 ボス「それ Plack::App::URLMap で」 以下、理由。 わざわざポートを別に空けるほどじゃない 再起動・監視とかを高々1個のcgiのためにする?したい? 仮に本体が死んだとして、gamだけ生き残っててどうしろと とい…

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() e…

google analytics mobile

今までga.plを普通にCGIとして設置したことはあったけど、いわゆるバックエンドに実装した事は無かった。 で、今回することに。出来るgamの設置は2つ。 ga.plをCGIで 論外 ハンドラ書くなりディスパッチ先のメソッド書くなりしてバックエンドで 普通はこうす…