メメメモモ

プログラミング、筋トレ、ゲーム、etc

perl

twitterとgithubでフォローするスクリプト

twitterとgithubで一括でフォローできるように、perlでスクリプトを書きました。 twitter モジュールはNet::Twitter::Liteを使いました。 スクリプトに渡すYAPC::Asia2010のスピーカーのリストは下記のものになります。 github モジュールはNet::GitHubを使…

YAPC::Asia2010に参加してきた感想

ニート特権を発動して、前夜祭を含めた3日間をフルで参加してきました。 YAPC::Asiaの参加は初めてです。 すごく刺激的な場でした。 会場を歩いていると超有名なスーパーハッカーが普通に近くを歩いていたりします。 憧れの人と話せるチャンスがたくさんあ…

YAPC::Asia2010スピーカーの(Twitter/Blog/github/cpan)アカウント

個人的に把握したかったので調べました。 まだ一部調べきれてない。 敬称略です。 Yappo(twitter/blog/github/cpan) 長野雅広(twitter/blog/github/cpan) nekokak(twitter/blog/github/cpan) Tokuhiro Matsuno(twitter/blog/github/cpan) gfx(twitter/blog/g…

Mojolicious::Liteで、Text::XSlateを使えるようにする

(2010/12/03 追記) __DATA__部分が読み込まれない件に関しては、gfxさんが対応していただいたようです。 http://d.hatena.ne.jp/gfx/20101103/1288801272 (追記終わり) Text::Xslateというモジュールをチラチラ見かけて気になったので、 Mojolicious::Liteで…

perlでスクレイピング「Mojolicious::LiteとStarmanで閲覧用Webアプリを作成する」

スクレイピングしたデータは、見やすい形にしておくのがいいと思います。 場合によると思いますが、ブラウザで見られるようにしてあると便利な場合があります。 そこで、perlでWebアプリを作成します。 ただ、スクレイピングデータを見るためにだけのWebアプ…

perlでスクレイピング「URL操作」

URLに規則性がある場合 対象とするサイトのURLを見てみると規則性がある場合があります。 例えば、なにかを一覧しているページでは、URLに「page=002」といったパラメータが付いている場合があります。 この一覧ページはページングされていて、「page=002」…

perlでスクレイピング「データ保存のためのディレクトリ操作」

スクレイピングで取得してきたデータは保存します。 ただ単に保存するだけでなく、何かしら整理して保存した方が後から参照しやすくなります。 例えば、複数のサイトから毎日画像データを取得する場合、 取得してきた画像を「サイト毎」「日付毎」に保存した…

perlでスクレイピング「HTML解析してデータを取得」

HTMLからデータを取ってくることは正規表現でもできます。 しかし、ちょっとでも表記が変わってしまうとうまく動作しなくなってしまいます。 また、正規表現を読み解くのは結構面倒くさいので、保守するのも大変です。 javascriptにはDOMやXPathがあります。…

perlでスクレイピング「正規表現でデータを取得」

取得してきたHTMLから必要な箇所だけを抽出します。 perlには正規表現の機能があります。 正規表現を使って必要なデータを取って来れます。 例えば下記のようなHTMLを取得したとします。 <html> <head> <title>Test Page</title> </head> <body> <div id="content"> <h1>Test Page</h1> <h2>主なトピックス</h2> <ul class="clr"> <li><span class="dateRight">8月30日</span><a href="/topics/title1.html">Title1</a></li></ul></div></body></html>

perlでスクレイピング「HTTPでページを取ってくる」

perlでのスクレイピング関連をメモしていきたいと思います。 まずスクレイピングするときに行なう処理は、ページを取ってくることです。 普段は、URLをブラウザのURL欄に入力し、ブラウザがHTTPでサーバにアクセスしてページを取得しています。 この処理をpe…

perl向けのemacs設定

今まではemacsの設定を最低限のものにしていたのですが、やはり生産性というものを上げようと考えた時に、エディタの便利な機能は使いこなしておいた方がいいのかな、と思いました. そのとっかかりとして下記のtypester先生の資料で紹介されている拡張と設…

Bresenham

perlでBresenhamアルゴリズムを書いてみました。 考え方は下記のような感じ。 xが増えたら、だけyが増える 整数単位の話なので、が1以上になったら、yが1増える じゃなくて、で比較すれば、割り算が無くなって便利 use strict; use warnings; bresenham_line…

変換系の確認

use strict; use warnings; use Devel::Peek qw/Dump/; # 74 print Dump hex("4A"); print Dump 0x4A; # "AB\0" print Dump pack("H*", "4142"); print Dump "\x41\x42"; # 65 print Dump unpack("C*", "A"); # "A\0" print Dump pack("C*", 65); # "48656c6…

タイ変数に付いて

perlには、変数の代入/参照が行なわれた際に実行する関数を結びつける機能があります。 この機能を実現するためにtie関数を使用します。 例えば、MyScalarモジュールと$scalar変数を結びつけるには次のように記述します。 tie $scalar, MyScalar; MyScalar…

XS入門でやった事メモ

h2xsコマンド h2xsコマンドでひな形を作成します。 $ h2xs -A -n MyTest コンパイル 出来上がったディレクトリに移動して次のコマンドを実行します。 $ perl Makefile.PL $ make Hello World!を表示する関数 XSでHello World!を表示するプログラムを書きます…

前進差分と中心差分で微分

次の関数を微分するプログラムをperlで書いてみました。 use strict; use warnings; difference(); sub f1 { my ($x) = @_; my $a = 2; my $b = 4; return $a*($x ** 2)+$b; } sub f2 { my ($u) = @_; return sqrt(1/(1+exp(-2*$u))); } sub difference { my…

試しにGoogleChartを使ってみる

計算した数値で、図を描画したいと思いました。 EXCELに貼付けたり、gnuplotを準備したりするのが面倒くさかったので、試しにGoogleChartを使ってみました。 perlから扱いたいので「Google::Chart」モジュールを使用しました。 use strict; use warnings; us…

シンプソン公式

シンプソン公式のプログラムを書きました。 シンプソン公式の特徴は下記の様な感じです。 台形公式より精度が高い 小区間[ , ]で、2次曲線を近似して積分する シンプソン公式のプログラムは下記のようにしました。 sub simpson { my ($f, $N, $a, $b) = @_;…

台形公式

台形公式で積分の値を求めるプログラムを書きました。 use strict; use warnings; main(sub { my $x = shift; return $x * $x; }, 100000); sub main { my ($f, $N) = @_; my (@x, @y); my $a = 0.0; my $b = 3.0; my $h = ($b-$a)/$N; for my $i (0..$N) { …

XML,JSON,YAMLを読み込んでperlのデータ構造に変換

XML,JSON,YAMLを読み込む処理のメモ。 一般的にどのモジュールを使えばいいのかよく分かりませんでした。 XML::Simpleを用いてXMLを読み込む use strict; use warnings; use XML::Simple; use Data::Dumper; my $xml = ''; my $parser = XML::Simple->new; m…

ダウンロードスクリプトにプログレスバーを付ける

ダウンロード中に、残りいくつかを表示するプログレスバー。 use strict; use warnings; use Term::ProgressBar; use LWP::UserAgent; $| = 1; my @urls = @ARGV; my $data; my $total_size; my $progress; my $next_update = 0; for my $url (@urls) { $dat…

標準正規分布に従う乱数

標準正規分布に従う乱数を発生させるプログラムを書いてみました。 正規分布は次のような式になります。 標準正規分布は、「」の正規分布になります。 この分布に従う乱数を生成するプログラムを書いて、生成結果を確かめてみました。 #!/usr/bin/env perl u…

ニュートン・ラフソン法

ニュートン・ラフソン法(ニュートン法)は、関数f(x)とx軸が交わる点の近似値を反復計算により得る方法です。 この方法を用いる際の注意点は次のようなものです。 関数f(x)がx軸と交わる 定義域の範囲で微分可能(接線が引ける) 接線がx軸と交わる 適切な初…

個人的勉強用リンク2

Javascript ポップアップメニュー - JavaScript ミスティーネット・JavaScript講座 jQuery: jQuery 実践サンプル JavaScriptの関数オブジェクトを完璧に理解する - builder by ZDNet Japan anything from here jQueryに学ぶ Javascript の基礎(7) 組み込みク…

循環参照と弱い参照とScalar::Util::weaken

参照カウンタ 次のようなコードを見ると、ちょっと不思議に思います。 use strict; use warnings; sub create_func { my ($name) = @_; my $func = sub { print "Hello, $name\n"; }; return $func; } my $func = create_func('memememomo'); $func->(); 不…

デーモン化する

スクリプトをデーモン化するには、スクリプト内でforkし、 親プロセスを終了して子プロセスを走らせます。 コードは下記のようになります。 「モダンperl入門」のコードをまんま引用させていただいてます。 use strict; use POSIX (); my $pid = fork(); if …

Mojo::IOLoopを使ってEchoサーバ

Mojo::IOLoopを使ってEchoサーバを書いてみました。 use strict; use warnings; use Mojo::IOLoop; my @_listen; my %message; # options my $options = {}; $options->{port} = 3000; # Accept callback $options->{cb} = sub { my ($loop, $id) = @_; $loo…

Test::ExceptionとTest::MockObjectを使ってテスト

Test::ExceptionとTest::MockObjectを使用したテストを書いてみました。 それぞれのモジュールは下記のような機能を持っています。 Test::Exception 例外のテストを行なうモジュールです。 下記のようなメソッドが定義されています。 lives_ok { test_code()…

Test::More、Test::Classを使ったテスト

Test::More、Test::Classをそれぞれ使ったテストについて調べました。 テストするモジュールは、下記のようなものです。 # 直線を表すモジュール package Line; use strict; use warnings; # 「ax + by + c = 0」の「a,b,c」部分が渡される sub new { my $cl…

クロージャの動作確認

クロージャというのは下記のようなものだと認識していました。 use strict; use warnings; sub create_closure { my $i = 0; my $c = sub { $i++; print $i, "\n"; }; return $c; } my $c1 = create_closure(); $c1->(); # 1 $c1->(); # 2 my $c2 = create_c…