理系学生日記

おまえはいつまで学生気分なのか

忍者TOOLS

perl

YAPC::Asia 一日目

参加した全セッションのメモを取ろうと思ってたんですが、きっと動画共有サイトにアップロードされるに違いないし、だれかがはてダにエントリ起こすだろうし、そもそも Mac の電源がもたないし、メモとるのメンドくなってきたしで最初のセッションしかメモと…

Gearman::Task の uniq オプション

Gearman::Task の第三引数の hashref ではコールバックが指定できるが、uniq というオプションも指定することができる。この uniq キーに対する value は、ユニークキーを指定することができ、ユニークキーが一致するジョブは merge される。つまり、一度に…

.m4a ファイルへのタグ付け

Audio::M4P::QuickTime を使えば m4a ファイルに対してタグを付けることができ、もちろん iTunes 上でも、設定したタグを確認することができます。 sub set_metainfo { my ($file, $title, $artist) = @_; my $qt = Audio::M4P::QuickTime->new( file => $fi…

Gearman クライアント側

とりあえず動いてはいるんだけど、Gearman::Task への scalarref の渡し方ってもっとキレいなかんじになるんじゃないかっていう感じする。 my $client; sub _setup_client { my ($servers) = @_; $client ||= Gearman::Client->new( job_servers => $servers…

perlbrew を使用したときの Emacs 設定

perlbrew を使用したときなどは、システム標準の perl ではなく、自身で使用を選択した perl が使用されます。 これは perldoc なんかも同様で、例えばぼくの perldoc は以下にパスが通っています。 $ which perldoc /Users/kiririmode/perl5/perlbrew/bin/p…

dbicdump があるから使い捨てスクリプト書く必要はなかった

Perl で DBIC を使用して DB 系のプログラムを書くときは、スキーマクラスの作成のために、よく DBIC::Schema::Loader の make_schema_at を使った使い捨てスクリプトを書いていました。しかし、そもそもその必要はなかった。 DBIC::Schema::Loader には dbi…

使ってみたかったモジュール使ってみた

明日からはもう定時で帰るんだ。 use strict; use warnings; use feature 'switch'; use URI; use Try::Tiny; use Log::Log4perl; use Web::Scraper; use YAML::Any; use Config::Any; my $VERSION = '0.01'; my $cfgfile = 'conf/fetch.yaml'; my $logger; …

Carp で強制的にスタックトレースを表示させる

モジュール内でエラーメッセージを出力する際にはよく、Carp モジュールの carp や croak が用いられますが、これらのメソッドは通常ではスタックトレースを伴いません。しかし、デバッグの最中でこのメッセージはどこで出力されたのか、どういうコールスタ…

Perl フレームワーク Catalyst 完全入門

Catalyst 解説書としては、従来より Definitive Guide to Catalyst という洋書が出ていました。The Definitive Guide to Catalyst: Writing Extensible, Scalable and Maintainable Perl-Based Web Applications作者: Kieren Diment,Matt Trout出版社/メーカ…

Youtube からのダウンロードとエンコードを Gearman で実行させる

Youtube のビデオを Web アプリからダウンロード・エンコードできるようにしていたのですが、この Web アプリの実装は、ダウンロード及びエンコードの間レスポンスはユーザに返却されないというクソ実装でした。 リクエスト自体は XHR で行うのですが、Catal…

ディレクトリに入ってる FLV を AAC に変換しましょう

使いすてスクリプト。 use strict; use warnings; use Path::Class qw(dir); use IPC::Run qw(run); my $dir = shift @ARGV; -d $dir or die "cannot find $dir\n directory"; dir($dir)->recurse( callback => sub { my $file = shift; return if "$file" !…

そういえば Class::Accessor に Moose-like な I/F が

去年の YAPC::Asia で Interface に関するセッションがあったときに Class::Accessor の I/F が DIS られた後、モジュール作者が Moose-like な I/F を付けました!! って blog にエントリを起こしてたような記憶がある。 use Class::Accessor::Fast "antlers…

Youtube Data API での動画検索方法

Youtube には、Youtube の機能をプログラムから(かなり)自由に使用できる Data API が用意されている。この Data API を使用することによって、評価の高い動画の取得や動画のアップロード、キーワード検索などが可能になる。中でも動画の検索はかなり気楽に…

自家製 CDTube ができつつあります

CDTube いいなーと思って、Catalyst の勉強がてら作ってみてるところ。 裏方でスクレイピングして DB にランキング情報を突っ込んでおき、Web アプリ側からそれにアクセス、Youtube の API で Video の情報を取得して表示させるという内容。コードとしてはた…

Youtube Data API を使った動画 URL の取得

Youtube には Data API があり、これを使うことによって動画の投稿や更新などが可能になります。この Data API が提供する機能の中には動画検索などもあり、これを使うとわざわざ以下のページのような Youtube ページのスクレイピングをせずとも、検索結果に…

Youtube を検索して動画の URL を抽出するには

という話が最近ありましたが、こういう話には WWW::Mechanize と Web::Scraper があればほとんどの用はたせるんじゃないかと思います。 use strict; use warnings; use WWW::Mechanize; use Web::Scraper; use Perl6::Say; use Encode; binmode STDOUT => ':…

perldoc-search つかえば良い

Catalyst の勉強をしてたら PathPart って何やって話になる。当然 POD を引きたい。どの POD に説明が書いてあるのかわからない。 そういうときは App::Perldoc::Search を使いましょう!!! App::Perldoc::Search には perldoc-search というコマンドが同梱さ…

Becky! の振り分けルールと振り分け先フォルダを自動作成する

新規に業務用 PC をセットアップするにして、なによりもメンドいのがメールの振り分けルールの作成です。 PC が壊れている 4 日間の間メール受信できず、久しぶりに受信するとメールが 2 万通ほどやってきた。人力でなんとかできるレベルじゃない。そういう…

AtomPub でスクリーンキャプチャから Hatena fotolife へのアップロードを自動化する

昨今の blog サービスで画像を貼り付けられないところはありません。ない。たぶんない。 もちろん我らがはてなダイアリーも、画像を余裕で貼り付けることができます。とてもよかった。これで老後も多い日も安心です。はてなダイアリーははてなフォトライフと…

twitter API で取得できる created_at のフォーマット

Twitter には様々な API が用意されていて、基本的な twitter クライアントがこの API を使って実装されているのはご存知の通りです。 例えばぼくが自分のタイムラインを取得するときは statuses/user_timeline API を用いれば良く、それによって複数の Twee…

Web::Scraper と Mac::Growl で雨が降り始めたら Growl で通知する

ぼくは基本的に PC の前にいて、PC の方を向いています。部屋のレイアウト的に、ぼくは家にいる時間の大部分を窓と反対方向を向いて過ごすことになります。 しかし今日のように、いつ雨が降り出すか分からないような状況で洗濯物を干していると、雨が降り始…

Catalyst ソースリーディング2

setup_components Catalyst::setup から呼び出される setup_components は、その名前の通り、Catalyst のコンポーネントのロードを行う。 sub setup_components { my $class = shift; my $config = $class->config->{ setup_components }; my @comps = sort …

Catalyst ソースリーディング1

$ catalyst.pl myapp で、作成された myapp.pm をまず見てみます。 use Catalyst::Runtime 5.80; use parent qw/Catalyst/; use Catalyst qw/-Debug ConfigLoader Static::Simple/; __PACKAGE__->config( name => 'myapp' ); __PACKAGE__->setup(); Catalyst…

Parallel::ForkManager 使って並行ダウンローダ作った

Parallel::ForkManager はじめて使ったけど、これスゴい使いやすいなって思いました。 3 並列でダウンロードさせるにはこんなかんじ。 $ youtube-downloader -v -p 3 -f ~/tmp/url.txt ソースこれ。 #!/usr/bin/perl #-*- cperl -*- use strict; use warning…

Youtube からのダウンロードモジュール作った

何度もスクリプト組むのがたいへん面倒になったので、ダウンロードモジュールをこさえた。 http://github.com/kiririmode/p5-WebService-Youtube-Download URL を与えると、だいたいこんな感じでダウンロードできるようになる。 WebService::Youtube::Downlo…

モジュール名からモジュールのソースファイルをシームレスに開く elisp Ver.2

モジュール名からモジュールのソースファイルをシームレスに開く elisp - 理系学生日記で多少便利にはなったんだけど、以下の点に不満があったりしました。 getenv で PERL5LIB 環境変数の値が取得できない場合がある*1 perldoc でエラーが発生した場合に、…

モジュール名からモジュールのソースファイルをシームレスに開く elisp

タイトルの通り、モジュール名を読んでモジュールのソースファイルを開く elisp を作ってみました。これによって、ソースを読みつつ気になったモジュールがあると、そのモジュールのソースもシームレスに覗くことができるようになりました。 動機 最近ヒマな…

Pin の Read It Later への転送スクリプト

WebService::{LivedoorReader,ReadItLater} の書き直しに伴い、Livedoor Reader の Pin 立てたエントリを Read It Later に送るスクリプト書き直した。 Livedoor Reader でピンを立てたエントリを Read It Later へ送るスクリプト書いた - 理系学生日記 これ…

Coro の Perldoc 読んでみた

空前の非同期ブームが襲来した 2009 年でしたけれども、ぼくは Coro をほぼスルー、後で勉強しよう後で勉強しようとか思って結局勉強しなかったクソでした。このままではマズい。死ぬ。そういうわけで、新幹線の中でちょっと Perldoc 読んでた。何がよくわか…

WebService::ReadItLater 書いた

薄い。 package WebService::ReadItLater; use base 'WebService::Simple'; use WebService::Simple::Parser::JSON; use strict; use warnings; use Carp; use JSON; our $VERSION = '0.01'; __PACKAGE__->config( base_url => 'https://readitlaterlist.com…