サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
CES 2025
tori243.hatenadiary.org
※2013/07/25 スクリプトと概要をUpdateしました 次期バージョンであるRedis 2.8ではこの問題を少しでも解決しようと、 CONFIG REWRITE というコマンドで、redis.confの書き換えを行えるらしい、 が、結局それを忘れたら同じことなのでこの問題の解決にはなるかは微妙なところだ。 メモリ上にしか反映されていない設定があるかどうかをなんらかの方法でチェックすることができれば監視するなどできると思うのだが…。 http://unknownplace.org/archives/twilio-redis-incident.html 書き捨てっぽいですが、差分をとるスクリプトをペロッと書いてみました。 概要 以下のようなことをしています。 値が空のキーはデフォルト値を設定 単位(K/M/G)を最小単位に戻す メモリ上のキーを正とします*1 メモリにのみキーが存在する
※便乗記事ですごめんなさい>< http://m.igrs.jp/blog/2013/03/14/ec2-ssh/ yogafireはec2を便利に使うためのコマンドラインツールです。 yogafireの機能はsshだけではありませんが、 sshするだけでも便利なのでチラッと紹介してみます。 インストール # ※cpanmコマンド無い時 brew install cpanminus # インストール (ncurses-devel / readline-devel / libxml2-devel パッケージが必要) cpanm https://github.com/toritori0318/p5-Yogafire/tarball/master 初期設定する yoga use --init sshする # 一覧から選択 yoga ssh # Nameタグが「www01」のサーバにsshログイン
機能追加したら捗りすぎてまじつらい。 以下ChangeLog。 ChangeLog(主要なもののみ) 大幅なリファクタリング ターゲットインスタンスを決定するロジックを統一化 ssh vpc サポート ssh proxy サポート インクリメンタルにフィルタを行えるように 'yogafire'を指定することにより、表示オブジェクトすべてに対してコマンド実行 renderコマンドに'template-file'オプション追加 'change-instance-type'コマンド追加 'update-ec2-tags'コマンド追加 selfオプション対応 'loop' オプション対応 instance-typeを最新にUpdateしたのとカラーリング対応 start / stop / reboot/ terminateなど複数同時実行出来ていなかったのを対応 'copy-and-launch'
https://github.com/toritori0318/p5-App-RedisTop/issues/5 issueを頂いて知ったのですが、 MANIFEST.SKIPに #!include_default を書いておくと デフォルトでMANIFESTから除外したほうがよいようなファイルを SKIPに追加してくれるようです。 blib/ pm_to_blib #!include_default こんな感じで書いておくと、make manifest の時に以下のように展開してくれる。 blib/ pm_to_blib #!start included /Users/toriitsuyoshi/perl5/perlbrew/perls/perl-5.16.2/lib/5.16.2/ExtUtils/MANIFEST.SKIP # Avoid version control files.
上がったようです。わーい\(^o^)/ http://search.cpan.org/~toritsuyo/App-RedisTop-0.01/ cpanm App::RedisTop でインストールできるようになりました。楽ちん! パッチを送っていただいたfujiwaraさん、hirose31さん、 lingerで相談に乗っていただいたsongmuさん、tokuhiromさん ありがとうございました!
追記2013/03/11 2.6対応と差分表示対応いただきました! @hirose31++ @fujiwara++ とある日 探してみたけどたしかにそれっぽいの無さそうだし 自分も欲しいし書くしか無い!!!! というわけで書きました。 https://github.com/toritori0318/p5-App-RedisTop 使い方 help引けば大体わかると思いますが、いくつか説明します。 その1 127.0.0.1:6379 のRedis情報を表示します。デフォルトだと3秒更新です。 redis-top その2 複数インスタンスを同時に表示することも可能です。 redis-top -i 127.0.0.1:6379,127.0.0.1:6380,127.0.0.1:6381,127.0.0.1:6382 いくつか頑張ってみた点 依存を気にした cpanとか使わなくても、1ファイルを
※注 タイトルに深い意味はありません https://github.com/toritori0318/p5-Yogafire だいぶ前からgithubには置いてたんですが 年始だしドキュメントっぽいのを書いてみることにしました。 超長い!でも便利かも! 前置き 仕事上AWS(EC2)を使うことが多いのですが、 自分で使っていて「こんなんあったら便利かなー」というのを寄せ集めたCLIです。 基本的な考え方としては「EC2をタグNameベースで」いろいろと操作できるようなツールですね。*1 *2 貧乏性な自分はスポットインスタンスを定常的に使うので yoga sshは割と必須だったりしています。 ※Windows たぶん動きません! インストール cpanm https://github.com/toritori0318/p5-Yogafire/tarball/master # cpanm無い
毎年恒例のPerl祭り「YAPC::Asia2012」に行って参りましたので トークや全体の感想などつらつらと。 前夜祭(今年は行けず…) トークまとめ Web::Security beyond HTML5 HTML5時代のWebアプリケーションのセキュリティについて ブラウザ側とサーバ側でどういう脆弱性があるか、 またどういう対策をすべきか、というありがたいお話。 IEほんとひどい。 リアルタイム通知システムの舞台裏 リアルタイム通知システムを開発するにあたって、 課題となったところやそれを解決した方法などのお話。 実は今自分もかなり似たような仕組みを作っていて 課題のところなどは「あーそうですよねー」など妙に納得しながら聞いてました。 通知サーバをクラスタ化するのは自分もRedisで検証してみたんですけど 同時接続15000行かないくらいで頭打ちになってしまい止めてしまいました*1 R
App::Rad というコマンドラインツールがあるのですが、 手軽にサブコマンド作れてだいぶウマーな感じなのに 日本語情報が全くないので紹介してみます。 基本系 まずは「rad.pl」に「bucho」というサブコマンドを作ってみたいと思います。 use App::Rad; App::Rad->run; sub bucho { return "Hello Bucho!"; } たったこれだけです。まずは実行してみましょう。 $ perl rad.pl Usage: rad.pl command [arguments] Available Commands: bucho help show syntax and available commandsいい感じにヘルプが出ました。 定義したサブルーチン「bucho」が勝手にサブコマンドとして認識されていますね。 buchoコマンドを実行してみましょ
https://github.com/toritori0318/p5-App-Monitor-Simple シンプルに「リトライ数だけ指定して全部エラーなら何かする」 ということがしたくて探してみたけど見つからず。 コードボリュームからしてもわざわざモジュールにする程でもないかもしれませんが、 あったらあったでまあまあ嬉しいかも、と思い書いてみました。 仕様 やることは至極単純で 「コマンド実行した戻り値が0 or 0以外でOKかNGを判定するだけ」 です。 オプションとしてリトライ数とリトライ間隔を指定することが出来ます。 コマンドラインツール monitor-simpleというのがついてきます。 詳しくは--help参照ですが、例を説明してみます。 httpサーバの監視 monitor-simple 'curl http://hogehoge.co.jp/'curl が正常終了するかど
前回はFacebook::Graphを使ってFacebookにアクセスできました。 しかし実はAmon2にはFacebookAPIにコネクトするプラグインも存在します。 プラグインを使うとFacebook::Graphなしでも簡単にトークンを取得することができます。 試してみましょう。 とりあえず再度新しくアプリケーションを作っておきましょう。 amon2-setup.pl FacebookAPIPlugin cd FacebookAPIPlugin プラグインの設定 FacebookAPIPlugin::Web.pmにプラグインの設定とコールバックを書いておきます。 __PACKAGE__->load_plugin( 'Web::Auth', { module => 'Facebook', on_finished => sub { my ($c, $token, $user) = @_;
FacebookAPIを使う要件が出てきそうなのでいろいろ調査中。 perlでFacebookAPIを使うにはFacebook::Graphがいいんでしたよね! Facebook::Graphのドキュメントにちょうどチュートリアルがあったので 試しに今回はその手順通りに設定していきたいと思います。 ただしそのままではなく一部Amon2用に置き換えてます。 また、今回は表示するデータを自分のニュースフィードにしてみました。 あと、Facebook アプリ登録画面ってログインするたびちょこちょこ変わってて 他のサイトの設定画面が参考にならなかったりするので スクリーンショットも添付してみましょう。 Step 1: Set up the developer application on Facebook. https://developers.facebook.com/ に行きます。 Step
http://metacpaninfoviz-jaqqcx56.dotcloud.com/ 仕様 左上のテキストにモジュール名を入力してsubmitすると依存ツリーを表示します。 依存ツリーはMetaCPANから取得しています。*1 視覚化にはJavaScript InfoVis Toolkitを使っています。 ToDo ソースコードをgithubにあげる metacpanサイトに飛べるようにする 依存モジュールがNotFound時にわかるようにする *1:モジュール毎に72時間キャッシュします
クローリング楽しいですよね! perlで高速にクロールしたいのであればGunghoなど使うのがいいかもしれませんが、 基本手軽にやりたいことが多いので WWW::Mechanize+Web::Scraper という組み合わせでクロールするのが定番でした。 しかしたまたま Scrappy を知り、 少し触ってみたところすごくいいのではないか!?と思い 記事にしてみました。*1 基本系(crawlコマンドを利用する場合) my $scrappy = Scrappy->new; $scrappy->crawl('1.クロールするルートURL', '2.URLにマッチするパス' => { '3.コンテンツにマッチするxpath or CSSセレクタ' => sub { my ($self, $item) = @_; # 4.キューに追加 $self->queue->add($item->{href
主要なモジュールでベンチマーク取ってみました。 単純にファイル出力するだけの使い方にしてみました。出力フォーマットも統一しています。 Log::Dispatch Log::Handler Log4perl Log::Minimal バージョン perl 5.14.1 Log::Dispatch 2.29 Log::Handler 0.71 Log::Log4perl 1.33 Log::Minimal 0.08 スクリプト 実行結果(その1) % perl bench_log.pl 30000 Benchmark: timing 30000 iterations of log4perl, log_dispatch, log_handler, log_minimal... log4perl: 2 wallclock secs ( 1.87 usr + 0.19 sys = 2.06 CPU)
my $var = "hogehoge123"; $var =~ s/hoge/fuga/g; このようにPerlの一般的な置換を行うと変数そのものを置換する。 しかし、置換後の結果を別変数に格納したい場合もある。 その場合は以下のように記述する (my $tmp_var = $var) =~ s/hoge/fuga/g;
CatalystだとCatalyst::Plugin::I18Nを使うのが楽みたいですが、 Xslateだと使えないようなので Text::Xslateのドキュメントを参考に自前で設定してみました。 (ちなみに今回の目的は国際化ではなく、ラベル等をファイル管理したかっただけという...) サンプル https://github.com/toritori0318/Catalyst-Xslate-Po-Example 必要なモジュール(CatalystとText::Xslateは除外) I18N::Handle App::I18N Catalyst::View::Xslate とりあえずの手順 catalyst.pl でアプリケーション生成 catalyst.pl PoDemo とか。 po プロジェクト?の初期設定 App::I18N をインストールすると「po」というコマンドが使えるように
外部APIを用いたWebアプリのコントローラテストについて。 たとえば 数値の2乗を結果として返すAPIサーバ があるとして、 そのAPIを利用した結果をHTMLとして出力するアプリケーション を考えてみます。 しかし、このように外部APIサーバを用いるとテストが難しくなります。 もしかしたらアクセスコントロールされているかもしれませんし、 メンテナンスされているかもしれませんし、 オフラインだとそもそもテストできないですよね! そこで外部APIサーバを振舞うplackサーバをローカルで立ち上げて それをproveで利用できるといいかも。 というわけでそのような環境を作ってみます。 サンプルWebアプリ *1 まずは /api に アクセスすると 外部APIサーバにアクセスしてその結果を返すだけのコントローラを書いてみます。 $host はテストからコントロールできるように環境変数をみてい
唐突に。 ものすごくざっくりですが現状は以下のような構成つかってます。 流行りかどうかはわかりません>< ちょっとしたWebアプリ(想定 ユーザ/10人くらい) Webサーバ Apache(CGI) DB SQLite WAF Mojolicious::Lite ORM DBIx::Skinny 最近だと簡易デプロイWebアプリとか、ちょっとしたものを作るときはほぼこんな感じですね。 Mojoならレンタルサーバにもポイッて置くだけで動く上に 機能もほぼ全部入りなので使えると便利ですね。 このくらいの規模ならCGIで十分。 管理画面系(想定 ユーザ/100人くらい) Webサーバ(フロント) Apache Webサーバ(アプリケーション) Starlet or mod_perl DB Postgresql or MySQL WAF Catalyst or Mojolicious ORM DB
YAPCにてYappoさんの「Ajax Application Testing」を聴き興味をそそられました。 今回はクロスブラウザでのテスト自動化を実現したかったのでその辺りも試してみました。 http://yappo.github.com/talks/20101016-yapcasia2010-jstapd/ インストール cpanm JSTAPd スケルトン作成(hoge という名前のプロジェクトの場合) jstapd -n hoge テスト用デーモン起動 jstapd -d hogehttp://127.0.0.1:1978/____jstapd/ にアクセスして 「make test」ボタン押すとテスト動きます! 超簡単! テストをどう書くか 自分の場合はAjaxではなく生JSをテストしました。 いろいろ自由に書けますが、基本的には以下のように書けばOK。 ????.t ファイルに
はい1日目に続いて2日目。 つらつらと書いていきます。 まずは今日買ったもの perl Tシャツ Acme大全2010 ラクダ本vol1(ラリーさんのサイン入り!やった!) nginx & Perl / fujiwaraさん ハイパフォーマンスHTTPサーバであるnginxの仕組み、 Lighttpdとの比較、プラグイン、Perl埋め込みで使う方法の紹介など。 前日の懇親会でも直接お話したのですが、 プロキシサーバとしてオススメということなので一度触ってみます! Ajax Application Testing / Yappoさん AjaxのテストをJSTAPdを使ってperlのテストっぽく書ける、というお話。 うちのサービスでもAjax(JS)のテストどうすればいいかなー? と考えていたので、自分のところでも使えるかどうか試してみる予定です。 Perl で自然言語処理 / overlas
YAPCきたー! 前夜祭は出れなかったんですが1/2日目は行けたので 自分が見たセッションの感想などをつらつらと書きます。*1 That Goes Without Saying (or Does It?) / Larry Wallさん ラリーさんですよラリーさん! ぴょんぴょんはねたり裏声になったりおちゃめな方のようでした (内容について書いてな(ry Modern Perl Web Development on Amazon EC2 / Kazutake Hiramatsu さん Plackアプリの説明/Plackサーバの違い/EC2でのデプロイ方法/注意点など。 スライド見たい>< それにしてもEC2のオートスケール便利そうだなー。 現サービスを本格的に移行しようかなー リクルートのPlack採用事例と、VMによるチーム開発環境構築 / メディアテクノロジーラボさん リクルートではどの
※ 2010/9/26 追記 最新版とのベンチマーク比較 http://d.hatena.ne.jp/tori243/20100927/1285594260 ※ 2010/9/15 追記 Mojoはまだβ版で、現在は安定稼働を優先に開発が進められているそうです。 最適化フェーズはその後のようなので いずれはこのような問題も解消されていくと思われます。 現在サービスインしてるMojoliciousアプリのパフォーマンスがなかなか上がらんなーと数日がんばったのですが、 結局、単にサーバがついていけてないだけかなーという結論になった。 現状Mojoliciousを載っけてるwebサーバは某クラウドの一番下のモデルで CPUが1GHzでメモリ512Mというやつなんですが、 MojoのGETパラメータが増えたり、MojoX::Dispatcher::Routes::Controller::param
perlbrewでインストールしたperlでapacheとmod_perlをソースビルドしようとしたら mod_perlのmakeでエラーが発生。 以下はその対応記録。 環境 os CentOS5.3 64bit perl 5.12.1 apache 2.2.15 mod_perl 2.0.4 エラー内容 libperl.a(op.o): relocation R_X86_64_32S against `PL_sv_yes' can not be used when making a shared object; recompile with -fPIC libperl.a: could not read symbols: Bad value ググってみたら、これらがHITした。 http://www.gossamer-threads.com/lists/modperl/modperl/1
※2010/8/21 モジュールを少し書き直した テストはやっぱり同じプロダクトでやったほうがいいよ!と助言頂きましたのでTest::mysqld使うことにしました。 自分のやり方はいろいろ遠回りしてる気もしますが、一応自分のやりたいことはできたのでメモメモ。 ちなみにWAFは mojolicious でO/Rマッパは DBIx::Skinny とします。 参考URL http://mt.endeworks.jp/d-6/2009/10/things-ive-done-while-using-test-mysqld.html http://www.art-code.org/presen/hokkaido.pm/1/index.html こちらをミックスしたような方法。 ディレクトリ構成抜粋 -- lib -- ... -- db `-- create_table.sql -- t -- f
こういうの無かったらつくってみようかなーと思ったんですが、やっぱりありましたね。 テスト用で使ったsql文(oracle) CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL, ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7, 2), COMM NUMBER(7, 2), DEPTNO NUMBER(2), CONSTRAINT PK_EMP PRIMARY KEY(EMPNO), CONSTRAINT FK_DEPTNO FOREIGN KEY (DEPTNO) REFERENCES DEPT ); CREATE TABLE DEPT (DEPTNO NUMBER(2), DNAME VARCHAR2(14), LOC VARCHAR2(13)
前回のPerlCasualにも参加させていただきましたが、今回も行って参りました! 例によって走り書きのメモから感想など。 リソース監視ツール・フレームワークCloudForecastの紹介 kazeburoさん CloudForecastの特徴など。 分散処理、高速動作 大規模運用にも適用 yamlによるシンプルな設定 グラフ表示用webサーバ内蔵 perl うちの会社では監視について、かなりお手軽に設定できるmuninを使っているのですが サーバ管理やグラフ描画の部分については不満があります。 CloudForecastのデモ画面を見せていただいたのですが とても管理しやすそうですしyaml管理できるのもいいですね。 インストールが障壁かもしれませんが一度触ってみます。 WebアプリケーションエンジニアのためのiPhoneアプリ開発入門 typestarさん どうしてiPhoneプログ
会社でmojoliciousを使って開発したサービスがあるのですが、 リリースが近づいてきたのでデプロイをどうするか決めることに。 perlのWAF使ったデプロイをしたことがないので どの方法がいいか決めかねている。 そのためいろいろ試してみて問題なさそうなのを採用。 デプロイ参考 MojoのCookBookを参考にしてみる*1 http://github.com/kraih/mojo/blob/master/lib/Mojolicious/Guides/Cookbook.pod ただし、nginxとfast-cgiは除外。 nginxは使ったことない。fcgiは設定うまく行かなかった サーバは貧弱 なのでなるだけリソースを使わない方法がいいかも*2 調査方法 apachebenchで負荷かけてその様子をみる。 本当はvmstatとかsarとか見るべきかもしれないが、 今回はtopだけでな
ツイッターでつぶやいたらアドバイス頂いたので試してみた。 この方法でいいのかどうかは不安ですが一応手順をメモ。 要は、サーバ全体でのperlデフォルト環境をみんな一緒にしたかったということ。 /usr/bin/perl を直接変えちゃうのはいろいろ問題ありそうなので /usr/local/bin/perl をperlbrewで管理するperlにしちゃえば良さそう。 perlbrewの設定 インストールは適当に App::perlbrew でOK。 ただ、全ユーザで使いたいのでみんなが見えるところに置かないといけない。 今回は /usr/local/perlbrew に置くことにする。 で、 perlbrew のルートを設定するわけだが PERLBREW_ROOT という環境変数を使う。 以下はその設定の流れ。 cpan App::perlbrew echo "export PERLBREW
次のページ
このページを最初にブックマークしてみませんか?
『Perl勉強メモ アルパカDiary出張版』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く