読者です 読者をやめる 読者になる 読者になる

個人的勉強用リンク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…

標準モジュールと関数を用いてディレクトリ操作、ファイル操作

ディレクトリ操作系、ファイル操作系の処理プログラムメモです。 FIle::Path File::Spec Time::Piece stat unlink 保存ディレクトリが無い場合、作成してファイルを保存 File::Path ディレクトリ作成 FIle::Spec OS依存に対応したパス作成 use strict; use w…

cronで実行するプログラムでの「use lib」

任意のディレクトリにあるモジュールを読み込む際に、ディレクトリのパスを設定します。 例えば src/ main.pl lib/ Test.pm Test/ Class.pm という構成があり、main.plからTest.pmを読み込むときのコードは下記のようにします。 use lib 'lib'; use Test; my…

画像の扱いについて

画像のリサイズを行う必要があったので、関連のモジュールやソフトウフェアをインストールしました。 しかし、結構上手くいかないことがあったのでメモ。 環境は「MacOX Snow Leopard」です。 試したモジュールはこちらで紹介されていたものです。 Webから画…

AnyEvent::Twitter::Streamでベイジアンフィルタの様子を見る

ツイートストリームをベイジアンフィルタでカテゴリ分けしていく様子を見てみました。 カテゴリとしてハッシュタグを利用します。 ハッシュタグが付いているツイートは、フィルタの学習テキストとなります。 ハッシュタグが付いていないツイートは、どのハッ…

ベイジアンフィルタの学習データをデータベースかStorableで管理

WEB+DB PRESS Vol.56作者: 赤松祐希,紀平拓男,牧大輔,西林孝,中島聡,中島拓,角田直行,はまちや2,舘野祐一,きしだなおき,和田裕介,伊藤直也,大沢和宏,塙与志夫,増井俊之,ミック,WEB+DB PRESS編集部出版社/メーカー: 技術評論社発売日: 2010/04/24メディア: 大…

GD::SecurityImageを使ってCAPTCHA画像を生成

GD::SecurityImageを使ってCAPTCHA画像を生成を試してみました。 GDが入っていなかったので、インストール手順から。 GDのインストール CPANモジュールを入れる前に下記のリンクからライブラリをDLしてきてインストールします。 http://www.libgd.org/Downlo…

AnyEventに関する写経用サンプルプログラムリンク集(Tatsumaki含む)

AnyEvent(Tatsumaki)の勉強で写経するのに良さそうなサンプルプログラムがあるページを集めました。 第13回 AnyEvent:イベント駆動モジュールの方言を吸収する(モダンPerlの世界へようこそ) Hello World的な短いサンプルプログラム AnyEventでechoサーバ - …

perlbrewを試してみた

カジュアルPerl #2 *1で、id:miyagawaさんが紹介していた「perlbrew」を試してみました。 「perlbrew」は、ホームディレクトリにperlをインストールするモジュールです。 複数のバージョンのperlをインストールして切り替えることもできます。 cpanも管理者…

AnyEvent::IRCを試す2

http://d.hatena.ne.jp/memememomo/20100416/1271371693 irc_privmsg => sub { my ( $self, $msg ) = @_; my $comment = $msg->{params}->[-1]; my $trans_url = 'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=' . uri_escape($com…

MapReduce::Liteで転置インデックスを作成

MapReduce::Liteを使って、転置インデックスを作成するプログラムを書きました。 docIDとかwordIDとかは無しで、ファイル名や単語をそのままキーとして使うようにしています。 全体的な流れとしては、 複数のファイルを読み込む(perl reverse_index.pl index…

MapReduce::Liteを使って形態素解析と単語ベクトル生成

形態素解析をMapで行ない、単語の登場回数をReduceで行なうプログラムを書きました。 MapReduceのフレームワークは、MapReduce::Liteを使用しました。 Mapperの定義 文章を受け取って、形態素解析を行ない「(単語,1)」のkey-valueペアを作成します。 形態素…

AnyEventを使ってProxyサーバを書いてみた・・・けど2

こっちで書いたプログラムをAnyEvent::Handleを使って書き直してみました。割と短くなりました。 use strict; use warnings; use AnyEvent; use AnyEvent::Socket; use AnyEvent::Handle; my $proxy_port = 8080; my %conn_table; my %request; my $cv = Any…

AnyEventでProxyサーバを書いてみた・・・けど

http://gist.github.com/378947 AnyEvent::Socketを使ってProxyサーバを書いてみました。 けど、ちょっとまだ動作が不安定。 AnyEventを理解しきれていない感がたっぷりです。 AnyEvent::HTTPを使って書き直す予定。 use strict; use warnings; use AnyEvent…

四則演算と変数の扱いができるlisp

変数を使った四則演算ができる簡単なlispインタプリタを書きました。 トークン解析と構文解析 lispは下記のように書きます。 (- 3 2) ;6 (- 3 (* 2 3)) ;-3 (setq a 3) プログラムはリストで記述されます。 リストとは'('と')'で囲まれた部分です。「(- 3 2)…

コンパイルフェイズとインタプリタフェイズで自動実行される部分について

BEGINブロック、CHECKブロック、INITブロック、ENDブロック Perlプログラムが実行されるまでの流れは下記のようになります。 この流れの中で自動実行されるブロックがあります。 実行されるブロックとその実行タイミングは以下のようなものです。 INITブロッ…

zipを扱うスクリプトメモ

複数の画像があるフォルダを圧縮してできたzipファイルを扱うスクリプトに関するメモです。 Archive::Zip zipファイルの操作は、Archive::Zipモジュールを使用します。 use strict; use warnings; use Archive::Zip; my $zip_path = $ARGV[0]; my $m_zip = A…

構文解析器

前回は、抽象構文木をプログラム直打ちで記述していました。 今回は、下記のスクリプト文字列を読み込んで、抽象構文木を作成する構文解析器を作成しました。 n=5;x=1;L5{x=x*n;n=n-1};x' スクリプトの構文解析を行なうためには、 まずスクリプトの構文がど…

抽象構文木構築

下記のスクリプトは、nの階乗を求めることを想定しています。 n = 5; x = 1; L n x = x * n; n = n - 1; x; このスクリプトを構文木の形で表現して実行するプログラムを書きました。 構文木は下記のようなものになります。プログラムは、木の節点に対して一…

perlによるネットワークプログラミングに関するメモ

ネットワークプログラミングでは、主にソケット処理のプログラムを記述していきます。 ソケットとは、ネットワークに関連したファイルディスクリプタで、下記のように作成されます。 use Socket; my $sock; socket( $sock, PF_INET, SOCK_STREAM, getprotoby…

AnyEvent::IRCを試す

最近、IRCチャットを始めたので、スクリプトからなにかできるようになればいいな、と思いました。 で、モジュールを探したら「AnyEvent::IRC」を発見しました。 ということで、投稿された英語コメントを日本語に翻訳して表示するスクリプトを書いてみました…

Google AJAX Language APIをPerlから叩いて翻訳する

翻訳関係のAPIはないかなー、と探していたところ下記の記事を見つけました。 Google AJAX Language APIをPHPから叩いて翻訳する PHPの例だったので、perlでのコードを書いてみました。 use strict; use warnings; use URI::Escape; use Encode; use LWP::Sim…

バブルソート

バブルソートを行なうプログラムをperlで書いてみました。 use strict; use warnings; { my @a = (8,4,3,9,7,6,5,2,1); print "===================\n"; print join(',',sort(@a)) . "\n"; } sub bubble_sort { my @a = @_; my $a_length = @a; for (my $i =…

逆ポーランド記法を使って四則演算を行なう

配列に入っている式から四則演算行なうプログラムをperlで書いてみました。 演算子とカッコの優先度を考慮しながら計算するために、逆ポーランド記法に直して計算するようにしています。 use strict; use warnings; { cal(qw|5 + 4 - 3|); cal(qw|5 + 4 * 3 …

シンボルテーブルについて

perlには、シンボルテーブルというものがあります。 このテーブルには、パッケージ名やサブルーチン名などが格納されています。 perlのコンパイラが参照するためにシンボルテーブルがあるのです。 シンボルテーブルは、パッケージ毎に存在します。 例えば、 …

Perlによるスレッドプログラミングメモ

スレッドの生成 perlでスレッドを使用する時は、Threadモジュールを使用します。 スレッド生成の記述は二つあります。 use strict; use warnings; use Thread; my $something; my $t = Thread->new( sub { say ($something) } ); use strict; use warnings; …

TwitterStreamをTatsumakiを使ってブラウザ表示

http://d.hatena.ne.jp/memememomo/20100408/1270679837 こちらのプログラムの結果をTatsumakiを使用してブラウザで表示するようにしました。 app.psgi ここでは、ディスパッチ設定を行ないます。 「http://localhost:5000/{トラックワード}」でアクセスして…

AnyEvent::Twitter::Stream

AnyEvent::Twitter::Streamは、イベントループ内でTwitterのStreamAPIからデータを受け取っています。下記のコードは、受け取ったデータのうち、ユーザー名とツイート内容を表示しています。 #!/usr/bin/perl use strict; use Config::Pit; use AnyEvent::Tw…

Config::Pitモジュールについて

Config::Pitモジュールは、プログラムにパスワードなどのハードコードを避けるためのモジュールです。 例えば、ニコニコ動画のダウンローダを作るときは、ログインする処理を書く必要があります。その時に、下記のようにパスワードをプログラムに書いてしま…

POE,AnyEvent,Coro,Tatsumakiに関して

POE,AnyEvent,Coro,Tatsumakiの関係性がいまいち掴みきれていません。 ちょっと調べたことメモ。 イベントループのプログラミング イベントループとはイベントを見張るループ プログラマはイベントに対応したプログラムを作成する イベントループでイベント…

utf8の扱い

下記のプログラムをutf8で書いてみます。 use strict; use warnings; my $str = 'テスト'; print length $str, "\n"; # 9 実行すると「9」が出力されます。length関数は「テスト」をバイトとして扱うので、 返す結果は「3文字」ではなく「9バイト」になる…

Acme::Lisp

http://search.cpan.org/~ambs/Acme-Lisp-0.03/lib/Acme/Lisp.pm 下記のようにLispの計算を評価してくれます。 use strict; use warnings; use Acme::Lisp; # 引き算 my $lisp_code = [ qw(- 1 2 3 4) ]; print eval_lisp($lisp_code) ,"\n"; # 再帰的なリス…

ユークリッドの互除法

ユークリッドの互除法をperlで書いてみました。 use strict; use warnings; { gcd(160,48); } sub gcd { my ($x, $y) = @_; my $c; while ($x > 0 && $y > 0) { if ($y > $x) { $c = $x; $x = $y; $y = $c; } print "$x, $y\n"; $c = $y; $x = $x - $y; $y =…

クイックソート

クイックソートを行なうプログラムをperlで書きました。 use strict; use warnings; { my @a = qw/3 2 0 5 8 3 4 1 3 2/; print join(',',@a) . "\n"; print "===================\n"; print join(',',sort(@a)) . "\n"; } sub pivot { my ($ar, $i, $j) = @…

ACME

CPANにAcmeという名前空間があることを知りました。 ACMEには、ネタ的なプログラムがあって、とても面白いです。 面白いだけじゃなくて、ソースコードを読むと、とても勉強にもなります。 いくつか紹介してみたいと思います。 Acme::Sneeze http://search.cp…

マージソート

perlのsort関数はマージソートを使っているということなので、 勉強のため、perlでマージソートするプログラムを書きました。 use strict; use warnings; { my @a = (8,4,3,9,7,6,5,2,1); print join(',',@a), "\n"; print "===================\n"; print j…

Plagger導入

スクレイピングをやっていきたいと思ったので、「Plagger」を使ってみることにしました。 色々なところで言われている通り、ドキュメントが少ないです。 分かりやすい解説もあるのですが、その通りにやっても正常に動かなかったりしました。 ってことなので…

スタートアップ環境

Webサービスのスタートアップの環境として下記のものを使用していきたいなと思っています。 サクラインターネット (レンタルサーバ) http://www.sakura.ad.jp/ MENTA (perlフレームワーク) http://64p.org/menta/ SQLite (データベース) http://www.sqlite.o…