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

!!1する意味が分からない

1と!!1の違いが分からない。 !!'test' ならやりたいことは分かる。 !!1はやりたいことが分からない。ひとまずDumpしてみた。 use strict; use warnings; use Devel::Peek; # SV = IV(0xdf12788) at 0xdf12798 # REFCNT = 1 # FLAGS = (IOK,READONLY,pIOK) # …

Orepanでローカルミラーを作成・管理する

プロジェクトが依存しているモジュールをローカルミラーで管理します。 ローカルミラーはプロジェクトのバージョン管理下に入れます。 こうすることで、依存モジュールのバージョンを固定することができます。 管理ツールインストール ローカルミラーを管理…

make_database_yaml.plで、AUTO_INCREMENTの指定を外す

以下のようにして、単純にsedで取り除くだけ。 make_database_yaml.pl -d 'dbi:mysql:dbname' -u root -p xxx | sed -e "s/AUTO_INCREMENT=\d+//g;"

判別関係

Mail::Address::MobileJp メールアドレスからキャリアを判別するモジュール。 Mail::Address::MobileJp - search.cpan.org HTTP::MobileAgent HTTP_USER_AGENTからキャリアを判別するモジュール。HTTP::MobileAgent - search.cpan.org HTTP::BrowserDetect H…

$1の挙動でハマった

my $text = 'abcde'; # (1) $text =~ m/(bc)/; warn $1; # -> bc # (2) $text =~ m/(ce)/; my $tmp = $1; warn $tmp; # -> bc # (3) if ( $tmp ) { # do something for $tmp } (1)では、正規表現がマッチするので$1には"bc"が入ります。(2)では、正規表現が…

MacOSX LionにDBD::mysqlを入れた時の記録

LionでDBD::mysqlがすんなり入りませんでした。 ググったら解決方法が書いてあったのですが、 まんま倣ってやってもうまく入らなかったので記録しておきます。 perl perlはperlbrewでインストールしたものを使いました。 $ perlbrew install 5.14.2 $ perlbr…

.cgiで書かれたアプリをPlack::Testでテストする

各処理が.cgiファイルで分かれているアプリをPlack::Testでテストする方法です。 Plack::App::CGIBinでPSGIアプリに変換する .cgiファイルが置かれているディレクトリで以下のようなapp.psgiを置きます。 #!/usr/bin/perl use strict; use warnings; use Fil…

新MacBookAirでperlコンパイルエラーが出た

Snow LeopardからLionにアップデートしたiMacでは、コンパイルエラーは起こりませんでした。 新MacBookAirに入っていたLionにて、Xcode4.1をインストールした状態で、perlをコンパイルしたら以下のようなエラーが起こりました。 toke.c:1997:1: warning: use…

スクリプトファイルがあるディレクトリへのパスを得る

File::Basenameモジュールのdirname()関数を使います。 use File::Basename; # スクリプトファイルがあるディレクトリへの相対パス dirname(__FILE__); # 絶対パスを得るならFile::Spec->rel2abs()を使う File::Spec->rel2abs( dirname(__FILE__) ); スクリ…

STDERRの出力を変数に入れる方法

やり方が分からなかったので、 「STDERRの出力を変数に入れるにはどうしたらいいんだろうなぁ(チラッチラッ」 とツイッターでつぶやいていたら、 @hide_o_55さんと@punytanさんのお二方に教えていただきました。 どうもありがとうございます! 方法は以下の2通りで…

WebService::Pixivというものを作った

https://github.com/memememomo/p5-WebService-Pixiv 中では、Web::Scraperを使ってCSS3セレクタでデータを取ってきているので、一瞬で動かなくなる可能性があります。 と思ってたら、昨日当たりに一部リニューアルがあったみたいで、さっそく動かなくなって…

ニコニコ動画ダウンローダー

404 Blog Not Found:perl - ニコニコ動画ダウンローダー新認証対応版上記のスクリプトをコピペしても動かなくなっていたので、調査して対応しました。 といっても、原因を完全に突き止めたわけではないので、応急処置的な部分があります。 use strict; use w…

「優れたPerlプログラマを見分ける27の質問」に回答してみた(グダグダ)

How to Identify a Good Perl Programmer - Modern Perl Books, a Modern Perl Blog 「優れたPerlプログラマを見分ける27の質問」の日本語訳 - Islands in the byte stream 回答してみました。 1.Perl5において変数のシジルが示すものは何か シジルは型を表…

時間関係のメモ

エポック秒とかGMTとかUTCとかよく分かってなかったので一回調べました。 エポック(epoch) ある年代の起点となる年 協定世界時(UTC - Universal Time, Coordinated) なんか原子時計を基準にしてる 日本標準時(JST)は9時間進んでおり「+0900(JST)」と表記 グ…

Amon2でTengを使うときの設定

DBの設定などはこちらに沿っています。 今回は、以下のコマンドでアプリケーションの雛形を作成した場合です。 $ amon2-setup.pl Hello config/development.plの編集 Teng用の設定を書いておきます。 +{ 'Teng' => { dsn => 'dbi:SQLite:dbname=hello.db', u…

WebService::Simple::ATNDというものを作ってみた

ATNDのAPIを簡単に使えるようにすることを目指したモジュールを作りました。 https://github.com/memememomo/p5-WebService-Simple-ATND yusukebeさんの「WebService::Simple」を使って実装しています。 使い方は以下の通りです。 ATNDには「イベントサーチA…

Mojo::Clientを使ってみた

(追記)Mojo::ClientはMojo::UserAgentという名前になりました。 まだまだ開発中という感じですが、便利そうなので使ってみました。 まず基本的なリクエスト。 use Mojo::UserAgent; use Mojo::ByteStream 'b'; my $client = Mojo::UserAgent->new; # Mojo::…

XSお勉強メモ4

List::UtilのXSパートのminメソッドを読んでいたら下記のようなマクロがあった。 magic = SvAMAGIC(retsv); SvAMAGICマクロは「sv.h」に定義されていた。 #define SvAMAGIC(sv) (SvROK(sv) && (SvFLAGS(SvRV(sv)) & SVf_AMAGIC)) SvROK、SvFLAGS、SvRVは、下…

XSお勉強メモ3

SV構造体と操作関数の確認用スクリプト。 #define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" MODULE = Foo::Bar PACKAGE = Foo::Bar PROTOTYPES: DISABLE void test_newSV() CODE: { SV *svPv = sv…

XSお勉強メモ2「gdbを使ってみる」

gdbを使ってList::UtilのXS部分を見てみる手順。 List::Util::XS - search.cpan.org Makefile.PLの編集とコンパイル WriteMakefile()に「OPTIMIZE => '-g'」を追加。 perl Makefile.PL make で、コンパイル。 実行 下記のコマンドで、gdbを使いつつList::Uti…

XSお勉強メモ1

XS/XSUBとは PerlとC言語コードの拡張インタフェース記述用言語 PerlとC言語のglue C言語ですでに実装されているライブラリを使いたい時にXSを利用する xsubppとは XSのコンパイラ XSで記述されたソースをコンパイルして、Cのソースを生成する Hoge.xsからH…

Shibuya Perl Mongersテクニカルトーク#15に行ってきました。

Shibuya.pm#15に行ってきました。 http://shibuya.pm.org/blosxom/techtalks/201012.html http://live.streamingmedia.jp/shibuyapm15/ ストリーミング動画すごいですね。このクオリティでリアルタイムで流れていたのですか。 ツイートも再生されていてすご…

HTTPクライアントのテスト

HTTP クライアントのテストを Plack でやる方法について - TokuLog 改メ tokuhirom’s blogMojolicious::Liteで作ったテスト用のサイトにアクセスして、テストができるようにしたいな、 と思っていたら上記の記事を見つけたので試してみました。 Mojoの機能の…

ディレクトリ構造をハッシュで表現

テスト用にディレクトリとファイルを作成するときは、 my $root = catfile('','tmp','test'); my $config = { 'image' => { 'thumbnail' => { '600x600' => { '000.jpg' => 'file', '001.jpg' => 'file', '002.jpg' => 'file', }, '300x300' => { '000.jpg' …

Test::mysqldとDBIx::Skinnyを用いたテスト入門

MySQLを使ったアプリをテストするために「Test::mysqld」に入門してみました。 下記のスクリプトの主な流れは、 Test::mysqlでテスト用DBを作成 Test::Fixture::DBIxSkinnyでテスト用データを挿入 テスト用DBを用いてテスト という感じになっています。 また…

DBIx::Skinnyメモ

ひとまず慣れるまでに使っていこうと思っている部分に付いてのメモです。 テーブル作成 普通のSQL Schema設定 2つのファイルを作成。 下記のファイルでスキーマの設定を行なっていきます。 トリガーの設定やinflate/deflateの設定を行なっています。 上記で…

時間操作メモ

個人的に使いそうな機能のメモ 参考リンク DateTime - search.cpan.org Time::Piece -日付と時刻を扱う - サンプルコードによる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軸と交わる 適切な初…