タグ

perlに関するf99aqのブックマーク (197)

  • prociostat.pl と visualize_prociostat.R で Linux のプロセスのボトルネックを分析する - ablog

    今日もモツ鍋を堪能されていた模様の [twitter:@hasegaw] さんが Linux のプロセスのアクティビティを追跡してグラフ化するツールを Perl + R で作られたということで早速使ってみました。 プロセスがユーザーモードでCPUを使えているのか、I/O待ちになっているのかといった傾向を分析することができます。Oracle DatabaseCPUを使えているのか、どんな理由で待機している(CPUを使えていない)か見ることができるよう実装されていますが、そんなものはないプログラムでも /proc ファイルシステムを参照してプログラムの外側からボトルネック分析が可能になります。素晴らしい! こんな感じのグラフができます。 ツール prociostat.pl プロセスのCPU使用率、I/Oバイト数、I/O待機時間*1を秒間隔でCSVに記録する Perl スクリプト*2 情報ソ

    prociostat.pl と visualize_prociostat.R で Linux のプロセスのボトルネックを分析する - ablog
  • Perlで一枚岩のスクリプトをテスタブルにする | おそらくはそれさえも平凡な日々

    Perlで単一ファイルのスクリプトを書くと、すぐに配置して動かせるので重宝しますが、テストを書きづらいのが難点です。 ちゃんとpmファイルに分割して云々とかやると単一ファイルで動かなくなるし、かと言ってfatpackするのもちょっとした用途だったらやり過ぎだしめんどくさい。 ということで以下のように書いてはどうか。 if ($0 eq __FILE__) { main(); } sub main { ... } $0に実行ファイル名が入っているので、それがスクリプトファイル名と一致していたらmainの処理を実行する。pythonのif __name__ == '__main__':みたいな感じ。 このスクリプトをテストしたいときは、普通にテストスクリプトを書いてrequire 'main.pl';とかやれば、plファイルの中で定義されている関数とかが個別に呼び出せるのでそれをテストしてやれ

    Perlで一枚岩のスクリプトをテスタブルにする | おそらくはそれさえも平凡な日々
    f99aq
    f99aq 2014/08/14
  • 開発メモ#3 : レガシーなCGIアプリケーションのリファクタリング - naoyaのはてなダイアリー

    開発メモその3です。今回は Perl のおはなし。 何年も前に作ったウェブアプリケーションのコードを開いてみたら黒歴史なコードが出てきて憂な気分になる、そんな経験ありませんか。私はあります。ずっとそんな現実から目を背けて生きてきました。 さて、先日 Perl + CGI で書いて Apache::Registry で高速化している、実行環境が Apache に癒着した CGIアプリケーションを発見しました。おえ〜っ。一から作り直したい気持ちをぐっと堪えて、これを Plack 化したりとリフォームしていくとしましょう。その過程を以下記します。劇的ビフォア・アフター! ・・・とかは期待せず、地道な変更を積み重ねていくのがコツです。 方針 いきなりコードをがりがり書き換えていくというよりは、試行錯誤のしやすい環境に移行させていきながらリフォームを進めます。遠回りですが、結果的にその後の運用が楽

    開発メモ#3 : レガシーなCGIアプリケーションのリファクタリング - naoyaのはてなダイアリー
    f99aq
    f99aq 2013/01/31
  • Kazuho@Cybozu Labs: String::Filter っていうモジュール書いた - 続: (Twitter の XSS 脆弱性に関連して) 構造化テキストの正しいエスケープ手法について

    先のエントリ「(Twitter の XSS 脆弱性に関連して) 構造化テキストの正しいエスケープ手法について」の続き。 弾さんが「404 Blog Not Found:DHTML - 構造化テキストは構造化するのがやっぱ正しい」で示されているような DOM ベースの操作を行えば、原理的に XSS 脆弱性を防ぐことができます。ただ、クライアントサイド JavaScript によるレンダリングはウェブの構造を破壊するという点で筋が悪い(テーブルと FONT タグを利用したページレイアウトが批判されていた頃を覚えていらっしゃいますでしょうか。JavaScript によるレンダリングはウェブのリンク構造も破壊するので一層たちが悪いというのが自分の考え)ですし、サーバサイドでの DOM 操作は重たいので、できれば避けたいところです。 構造化テキストの HTML への変換は、よほど複雑な記法でない限り

  • each()は遅い上に微妙な問題も起きやすい - Islands in the byte stream (legacy)

    特別な条件がないかぎり、each()は使うべきではありません。代わりにkeys()/values()を使うべきです。その理由は2つあります。 each()は遅い each()でハッシュ全体をループするのは遅いです。これは、keys()/values()がその内部の値をそのまま参照する*1のに対し、each()は代入しないとその値を使えないからです。 ベンチマーク: #!perl use strict; use warnings; use Benchmark qw(cmpthese); my %hash = map { $_ => $_ } ( 1 .. 10000 ); cmpthese -1, { each_k => sub { while(my $key = each %hash) { } }, each_kv => sub { while(my($key, $value) = eac

    each()は遅い上に微妙な問題も起きやすい - Islands in the byte stream (legacy)
    f99aq
    f99aq 2011/06/13
  • IPC::Open3 を使って、子プロセスの標準出力と標準エラー出力をポーリングする。(Windows でも動くよ!) - f99aq8oveのブログ

    先日の IPC::Open3 を使って、子プロセスの標準出力と標準エラー出力をポーリングする。(Windows では動かなかった…) - ◆F99a.q8oVEの日記 は Windows では動きませんでした。 Windows のルートでは # $dad_wtr は open3 の第2引数 # open3(undef, '>&'. fileno($child_out), '>&' . fileno($child_err), @cmd) # を実行したとすると '>&'. fileno($child_out) $dad_wtr =~ s/^[<>]&// $kid_rdr = \*{$dad_wtr}; されたものが fdopen に渡されています。 ここで、上の例のように fd を渡してもうまくいきませんでした。 そこで、 open3(undef, '>&'. $child_out, '>

    IPC::Open3 を使って、子プロセスの標準出力と標準エラー出力をポーリングする。(Windows でも動くよ!) - f99aq8oveのブログ
    f99aq
    f99aq 2011/05/10
  • Perlではじめるテキストマイニング - JPerl Advent Calendar 2009

    Perlではじめるテキストマイニング - JPerl Advent Calendar 2009 Perl に関するちょっとした Tips をのっけてみるよ。ちゃんと続くかな? ■前置き みなさんこんにちは。ダウンロードたけし(寅年)です。来年は年男なので今からお正月が待ち遠しい35歳2児の父です。 ここ数年、web広告業界ではコンテキスト解析とかユーザの行動分析とか、いわゆるデータマイニング/テキストマイニング系の話題が花盛りです。 自分もそんな業界に属しているんですが、ふと気がつくと日語のテキストマイニング系モジュールを量産してしまっているので、ここらでいくつか紹介してみたいと思います。 今回はインターネットからブログなどのコンテンツを取得して、それを意味解析してクラスタリングする、といったようなことを題材にモジュールの紹介をしてみます。 ■HTML::Featureで文抽出 まずは

  • Why Xslate is so Fast - Islands in the byte stream (legacy)

    (There is the Japanese version bellow) There are reasons why Xslate so fast, so this article explains them, which will be added to the Xslate document. Taking precompiling style Template engines which precompile templates are always faster than line-by-line interpreters. Almost all the engines implemented in scripting languages (e.g. Template-Toolkit or Text::MicroTemplate) takes precompiling styl

    Why Xslate is so Fast - Islands in the byte stream (legacy)
  • Five Test::More features you might not be using yet

    I’ve been using Test::More for so long that I sometimes forget about new features that have been added in the last couple years. If you’re like me and would like a refresher, here’s a list of five useful features that you might want to start using. Unless otherwise noted, you will need at least version 0.88 of Test::More. 1. done_testing instead of no_plan 🔗︎ If you don’t know how many tests you

    Five Test::More features you might not be using yet
  • Perl 以外の言語でかかれたTCPサーバーをTest::TCPでテストする - tokuhirom's blog

    Test::TCP の中で exec 発行すれば、groonga だろうと KT だろうと memcached だろうと、サーバープロセスのテストは簡単にできるのであって、サーバーごとにモジュールにする必要はない。以下は、groonga をテストする例。 Test::TCP は、さまざまなTCPサーバーのテストにつかわれており、さまざまな BK をふくんだ実装となっていて、これを再発明しようとすると、意外とめんどくさかったりするので、素直につかうとよいです。 use strict; use warnings; use utf8; use Test::More; use Test::TCP 1.08; use File::Temp (); use File::Which; my $bin = scalar which 'groonga'; plan skip_all => 'groonga

  • use Safe; # XS知らなくても大丈夫! : 404 Blog Not Found

    2008年06月30日16:45 カテゴリLightweight Languages use Safe; # XS知らなくても大丈夫! さすがにこの目的のためだけにXS Hackというのは、ハエ退治にパトリオットミサイル撃つようなものなので、キンチョールも紹介しておきたく。 PL_check hack - daily dayflower ゴール #!/usr/bin/perl eval 'print "Hello ' . $ARGV[0] . '!\n"'; とか危険ですよねー*1。こんな機能があるなんてけしからん。ですので,eval の実行を抑制するモジュールを書いてみました。 そのためには、Safeモジュールを使います。Perl 5.02からCOREに入っている由緒あるモジュールです。Malcolm Beattie がBのフレームワークを作った理由の一つが、これを可能にすることでした。

    use Safe; # XS知らなくても大丈夫! : 404 Blog Not Found
    f99aq
    f99aq 2011/01/30
  • Inline::x86でPerlの中に直接機械語を書く - JPerl Advent Calendar 2009

    Inline::x86でPerlの中に直接機械語を書く - JPerl Advent Calendar 2009 Perl に関するちょっとした Tips をのっけてみるよ。ちゃんと続くかな? 前置き こんにちは、id:TAKESAKOです。最近コロプラにハマるようになってきて近郊遠方の国内出張が楽しくなりました。JPerl Advent Calendar 2009 Hacker Trackも9日目ですね。そろそろPerlのソースを読むだけでは飽き足らずx86の機械語を書きたくなってきたんじゃないでしょうか。そんなわけで、今日は稚拙のInline::x86を紹介します。 題 皆さんの中にはよくx86を書く方もいらっしゃると思いますが、x86機械語を含むコードインジェクションは実行環境の設定が結構大変ですよね。Linuxのシステムコールmprotectを呼び出して実行ビットを追加で指定した

    f99aq
    f99aq 2011/01/30
  • Module::Install::XSUtilでXSモジュール用のMakefile.PLを書く - JPerl Advent Calendar 2009

    前置き こんにちは,gfxです。好きなソースはタルタルソースとsv.cです。JPerl Advent Calendar 2009 Hacker Trackも8日目ですね。そろそろTipsを読むだけでは飽き足らず,モジュールを書きたくなってきたんじゃないでしょうか。そんなわけで,今日はModule::Install::XSUtilを紹介します。 題 皆さんの中にはよくXSを書く方もいらっしゃると思いますが,XSモジュールを含むディストリビューションはビルド環境の設定が結構大変ですよね。build_requiresにExtUtils::ParseXSやXSLoaderを指定したり,make_maker_argsにOBJECT => '$(O_FILES)'を指定したりする必要がありますし,Cコンパイラは使えるか,Cコンパイラの警告を有効にしたい,ppport.hは十分に新しいか,などなど考え

    f99aq
    f99aq 2011/01/29
  • Burrows Wheeler Transform と Suffix Array - naoyaのはてなダイアリー

    ,. -‐'''''""¨¨¨ヽ (.___,,,... -ァァフ|          あ…ありのまま 今日 起こった事を話すぜ! |i i|    }! }} //| |l、{   j} /,,ィ//|       『BWT について調べていたら Suffix Array のライブラリができていた』 i|:!ヾ、_ノ/ u {:}//ヘ |リ u' }  ,ノ _,!V,ハ | /´fト、_{ル{,ィ'eラ , タ人        な… 何を言ってるのか わからねーと思うが /'   ヾ|宀| {´,)⌒`/ |<ヽトiゝ        おれも何をされたのかわからなかった… ,゙  / )ヽ iLレ  u' | | ヾlトハ〉 |/_/  ハ !ニ⊇ '/:}  V:::::ヽ        頭がどうにかなりそうだった… // 二二二7'T'' /u' __ /:::::::/`ヽ /'

    Burrows Wheeler Transform と Suffix Array - naoyaのはてなダイアリー
  • よく使用する関数・標準モジュール一覧 - Perl入門ゼミ

    Perl › よく使う関数・モジュール よく使用する関数・標準モジュールの一覧です。これらの関数を覚えておけば、Perlをより便利なものにすることができます。詳細な解説は避け、簡単なサンプルを紹介しています。戻り値のあるものについては$retという記号で表しています。 また、よく使用する特殊変数、標準モジュールについても、解説しています。各項目から、関数の詳細にもリンクしていますので、便利にご利用ください。 数学関数 文字列操作 配列操作 ハッシュ操作 ファイル入出力 ファイル・ディレクトリ操作 時刻・時間 その他の重要な関数 関数とモジュールのドキュメントの調べ方 よく使用する特殊変数 よく使用する標準モジュール 数学関数 abs 絶対値を求めるにはabs関数を使用します。 $ret = abs $num; abs(-3)は3になります。 sqrt 正の平方根を求めるには、sqrt関数を

    よく使用する関数・標準モジュール一覧 - Perl入門ゼミ
    f99aq
    f99aq 2011/01/22
  • perl - 配列の∪と∩ : 404 Blog Not Found

    2010年05月01日13:15 カテゴリLightweight Languages perl - 配列の∪と∩ これを解くためには、配列の∩(交わり、intersection)がわかればいいのですが… Perl Cookbook (English) Christiansen / Torkington [邦訳: Perlクックブック] perlPHPで解決したいです。 複数(最大200程度)の配列があり、 それぞれ有している数字(それぞれ最大50程度)のうち、 二つ以上の値が同じ配列名を抜き出す。 という事をし.. - 人力検索はてな複数(最大200程度)の配列があり、 それぞれ有している数字(それぞれ最大50程度)のうち、 二つ以上の値が同じ配列名を抜き出す。 実にエレガントな方法が、Perl Cookbookに載っています。 以下、実例。 #!/usr/bin/perl use st

    perl - 配列の∪と∩ : 404 Blog Not Found
    f99aq
    f99aq 2011/01/15
  • Log::Minimal meets Plack. Log::Minimalを使って環境に適したログ出力を - blog.nomadscafe.jp

    「運用におけるエラーログの重要性もしくはLog::Minimalってモジュール書いた話」で書いたLog::Minimalを、Plackと組み合わせたときにさらに便利になるMiddlewareを書きました。 ここで入手可能になるはず http://search.cpan.org/dist/Plack-Middleware-Log-Minimal/ 試しにログを吐くだけのアプリケーションを作ってリクエストをすると こんな風に、ログに色をつけてくれるのと、REQUEST_URIも付加してくれます。ただし色が付くのは開発環境(plackup -E productionとかしない場合)です。 Log::MinimalとPlack::Middleware::Log::Minimalの最大の特徴として粗結合+グルーとなるミドルウェアという組み合わせが挙げられます。Log::Minimal自体は特に依存が

    f99aq
    f99aq 2011/01/10
  • 第22回 Mojolicious::Lite:本当に簡単なウェブアプリがあればいいときは |gihyo.jp … 技術評論社

    あれから1年 Mojoについては2009年1月1日から4回にわたって特集記事を連載しました。ちょうど執筆を開始した直後に作者リーデル氏が不幸な医療事故にあい、一時はどうなることかと思いましたが、連載を終了する直前に開発続行の宣言が出て、ほっとしたのをよく覚えています。 あれから1年。Mojoを取り巻く環境はずいぶん変わりましたが、いま、Mojoはいったいどうなっているのでしょうか。今回は今年最後の記事として、Mojo界隈の近況をお届けすることにします。 大きく変わったといわれていますが…… 昨年12月にバージョン0.9に到達したMojoは、途中事故の後遺症で開発が停滞した時期はあったものの、この1年でかれこれ30回以上のリリースが行われたことからもわかるように、いまもなお着実に開発が続けられています。この「ベータテスト」期間中にいくつか後方互換性が失われる変更があったため批判を浴びたことも

    第22回 Mojolicious::Lite:本当に簡単なウェブアプリがあればいいときは |gihyo.jp … 技術評論社
  • Kazuho@Cybozu Labs: (Twitter の XSS 脆弱性に関連して) 構造化テキストの正しいエスケープ手法について

    昨日の Twitter の XSS 騒ぎは、まだ皆さんの記憶に新しいことと思います。いい機会なので、ツイートのような構造化テキストのエスケープ手法について触れておきたいと思います。 Twitter のメッセージは、単なる平文(プレインテキスト)ではなく、「@英数字」のような他のユーザーへの言及と「http://〜」のような URL を自動的にハイパーリンク化する構造化テキストです。 このような複数のルールをもつ構造化テキストを HTML 化する際には、どのようなコードを書けばいいのでしょう? まず「@〜」をリンク化してから、URL をリンク化すればいいのでしょうか? それだと、@〜 のをリンク化した A HREF タグの中の URL がさらにリンク化されていまいますね。 では、URL をリンク化してから @〜 をリンク化すればいいのでしょうか? それだと、@ を含む URL があった場合に

    f99aq
    f99aq 2011/01/08
  • Perl 5.12.0 がリリースされました! - Japan Perl Association運営ブログ

    Perl 5.12がリリースされました。5.12は5.10からの様々なバグフィックスや新機能・改良が追加されていますが、ユーザーにとってより重要なのは、それらの変更よりよりフォーマルかつ定期的ななリリースサイクル(開発版を毎月リリースしていくスタイル)を経て開発が進められた事が重要なリリースであると言えます。 Perlの主開発者達はPerl 5.8のリリースからPerl 5.10のリリースまでに5年間という長い期間を要した反省を生かし、定期的なリリースを繰り返すことにより確実に、そしてより早いタイミングでバグフィックスや新機能をユーザーに届けようという試みを5.10のリリース後に始めました。そしてはこれはその結果を反映した最初のリリースなのです。 This release cycle marks a change to a time-based release process.Beginn

    f99aq
    f99aq 2010/04/18