メメメモモ

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

perl

ScalaからRedmineを操作する

概要 Redmine API http://www.redmine.org/projects/redmine/wiki/Rest_api ScalaからRedmineのAPIを使って、チケットを取得したり操作したりするための設定を行います。 RedmineのAPIキーを取得 以下のページを参考に、RedmineのAPIキーを取得します。 http…

!!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でローカルミラーを作成・管理する

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

バージョン番号の比較

3.8.9と3.8.2.3の比較とかマイナー番号がなんかいっぱいあるときの比較。versionモジュールを使う。 use version; warn "true" if version->new('3.8.9') >= version->new('3.8.2.3'); warn "false" if version->new('3.8.9') >= version->new('3.8.9.1');

PPIとTest::LocalFunctions、Compiler::Lexer周辺について調べたこと

帰省中にTwitterを眺めていたら話題になっていて、知らなかった事だったので調べてみました。 MANIFESTファイルとMANIFEST.SKIPファイル MANIFESTファイルは、パッケージに含めるファイルの一覧です。 MANIFEST.SKIPファイルには、パッケージに含めたくない…

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入門