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

理系学生日記

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

忍者TOOLS

はてブのタグ表記揺れを修正するスクリプト書いた

はてブのタグの表記揺れが発生した!!! みたいなことある。あるいは、タグ名 typo してたけど補完にまかせてそのタグ名使い続けてたわ!!!! みたいなことある。下の画像が具体的な例で、carier っていう typo したタグ使ってた。こんなのを世界に向けて公開し…

PAUSE ID 取った

pause id 9 文字が最長で、kiririmode 10 文字だから ID 取れなくて、kiririmod になった。つらい。 http://search.cpan.org/~kiririmod/

WebService::Hatena::Bookmark::Lite が直らない

これバグってると思って pull req 出してるんだけど反応ない。新しいの作りたい。 WebService::Hatena::Bookmark::Lite - search.cpan.org

Pocket で特定のタグを付けたエントリを自動ではてブする

これでできる。 15 分毎で cron 登録した。 https://github.com/kiririmode/HatenaInYourPocket #!/usr/bin/env perl use strict; use warnings; use Getopt::Long qw(:config posix_default no_ignore_case gnu_compat); use Pod::Usage; use Config::Pit; …

Pocket クライアントモジュールを API v3 に対応させました

対応させました。WebService::Pocket::Lite です。 kiririmode/p5-WebService-Pocket-Lite · GitHub Pocket の Consumer Key と Access Token を取得していることを前提に、以下のようなコードが書けます。 use WebService::Pocket::Lite; my $lite = WebSer…

WebService::Hatena::Bookmark::Lite について

Pocket から はてブへ特定エントリ転送するツール作り直しているので、WebService::Hatena::Bookmark::Lite 使っているのだけれど、どうも 2 つほど問題があるっぽい。 "Use of qw(...) as parentheses is deprecated." っていうワーニングが毎回でる テスト…

Pocket からリクエストトークン取得するやつ

Pocket の API の version.3 がいつのまにか出ていて、予想通り oauth2 だったので、リクエストトークン取得する殴り書きスクリプト書いた。 スクリプト書く必要ないとおもう。curl あたり使ったらすぐに取得できるとおもう。HTTP::Body 使う必要もないとお…

スクリプトからの Livedoor Reader へのログイン方法

このエントリでは、(WWW::Mechanize ではなく)LWP::UserAgent を使って Livedoor Reader にログインするにはどうすれば良いのかを説明します。 WWW::Mechanize を使った方法 Livedoor Reader は(未公開ながらも)API を持っているので、これが利用できると世…

アニメの情報を効率よく集めるために OPML つくるスクリプトを作り人生が豊かになる

背景 ここだけは見とけっていうアニメ情報サイト10選 - 稀にライトノベルを読むよ^0^/ この何ともならない人生をそれでもアニメ充するために、ここに列挙されている Web サイトだけは見ておかなくてはならぬ!そうしないと人間が死ぬ!!lたくさん死ぬ!…

Data::Dumper に代わる Data::Printer

LL でデバッグと言えばデバッガではなく print デバッグ、という人は多いと思います。ぼくはもっぱら print デバッグです。 いまこのタイミングでこのオブジェクトはどんな値を持っているんだろう、というときは、Perl だったらもっぱら Data::Dumper を使っ…

Mixi ダイアリーを LDR で読めるように Plagger 設定

友人関係が Mixi と Facebook に分かれてしまったこともあり、個々人の Mixi ダイアリーを一々 Mixi のページを開いて読むのがメンドくさくなってしまいました。 以上の理由により、あーもう LDR で読めるようにしたいなーと思い、そういえば Plagger に Mix…

しょぼいカレンダーを iCal 化して iPhone でアニメ時間を確認する

YAPC::Asia Tokyo 2011 で id:hakobe932 さんが WebService::SyoboiCalendar の LT をされていました。 くわしくはこちらをご覧ください。 YAPC::Asia TOKYO 2011のLTでアニメについて話してきました - hakobenikki# - subtech これはしょぼいカレンダー と…

モジュールインストールのタイミングでタグテーブルファイル (TAGS) を作りなおしたい

モジュールをインストールしたら早速そのモジュールを使いたいですし、モジュールを使うってことは当然その実装を読む必要がありますし、実装を読むためには etags を使ってタグジャンプさせたいです。 というわけで、モジュールをインストールしたタイミン…

perlbrew環境でcperl-perldocをひく

perlbrew といえば自分の $HOME にローカルな Perl 環境を複数構築できるとツールで、最近の Perl の人々はこれを使うか自分でソースから $HOME とかにビルドするかしてると思います。これによってシステムワイドな perl を使わなくて済みますし、当然ながら…

Read It Later から直接はてブ登録する

この間、iPhone 上の Read It Later アプリから Twitter にツイートする運用を行い、そのツイートを捕捉の上ではてブするというスクリプトを書いたのですが、よく考えなくても、Read It Later から直接はてブすれば良いではないかということに気付きました。…

cpanm でモジュール名を補完する

インストールしたいモジュール名を cpanm の引数として一言一句タイプするのは面倒なので、zsh 上で、02packages.details.txt に記述されているモジュール名で補完させるようにしました。.zshrc に以下を書き込めば良いかと思いますが、注意点としては、ブラ…

zsh で perldoc H::S::P::N::S::P を実現する

Perl のモジュール名は長い Perl のモジュール名には名前空間があり、一般的には名前空間の階層構造によって、そのモジュールのドメインが示されることになります。 その結果、場合によってはモジュール名が異常に長くなったりします。2009 年のエントリにな…

split にハマる

Java で CSV ファイルをカンマで区切る処理を、RFC4180 をムシして簡単に書こうとすると*1、String#split を使うことが多いかと思います。 しかし、String#split には以下のような罠が存在します。 public class SplitTest { public static void main(String…

WebService::Simple ではてなブックマークエントリー情報取得 API を呼び出す方法

はてなブックマークエントリー取得 API は、JSON で結果を返却します。 そのため、以下のようなパラメータをコンストラクタを渡せば、一件問題がないように見えます。 my $ws = WebService::Simple->new( base_url => 'http://b.hatena.ne.jp/entry/jsonlite…

Read It Later Pro から Twitter に投稿したとき、はてブに自動で登録するスクリプト作った

これによって、Livedoor Reader で Pin を立てると Read It Later に自動転送され、iPhone/iPad 上の Read It Later で Twitter に呟くと、それが自動ではてブに登録され、さらに Evernote に登録されるというワークフローが確立しました!! 今回作成したのは…

はてなフォトライフへの投稿スクリプト

WebService::Hatena::Fotolife がすべてやってくれた。

Perl における flip-flop 演算子の使い道について

flip-flop 演算子とは、スカラーコンテキストで使用される範囲演算子(Range Operator) のことです。一般にはドット (.) 2 個で構成される演算子として認識されています。 この演算子は 2 つのオペランドを取ります。下記の例では、3 と 5 をオペランドに取っ…

おれ様の未読フィード数がいつでも確認できるようになったぞ!

本 blog の右端の、iddy の下にあるグラフがそれで、赤いヤツが Livedoor Reader 上の未読数、緑のヤツが Read It Later 上の未読数になってます。 これで、ぼくの未読フィード数はどれくらいなのかがスゴい気になって、夜も眠れずに目がギンギンになってる…

Read It Later 上の unread エントリの既読化

昔に登録したエントリを全部クリアしたいときに。 ちなみに get_list メソッドは Read It Later の get API を叩いているのですが、下記のような state だけの指定は Read It Later のサーバに負荷をかけるので、エントリ数が少ないときにしかやっちゃダメで…

LDR から Read It Later への変換を HTTP で叩けるようにした

下記エントリのスクリプトを cron で毎時間実行させることで、LDR の pin から Read It Later へ自動的に変換するようにしています。 LDR の pin を自動で Read It Later に追加する - 理系学生日記 これによって、LDR で立てた Pin が自動的に Read It Late…

LDR の pin を自動で Read It Later に追加する

というわけで、WebService::LDR と WebService::Pin を連携させると表題のことができるようになるという例。

Read It Later の Perl インターフェイスモジュール

つくって上げた。 https://github.com/kiririmode/WebService-RIL Read It Later の API を叩くので、使用の際は API Key が必要です。もちろん無料で入手できる。 Pocket: Log In 使い方としてはこんなかんじ。指定 URL から Text のみを引っこぬいてくる A…

Livedoor Reader 用の Perl インターフェイスを作りました

WebService::LDR という Livedoor Reader 用のインターフェイスを作って、Github に上げときました。 https://github.com/kiririmode/WebService-LDR 誰得というと僕得なのですが、これによって例えば任意の URL に対してピンを立てたり、購読しているフィー…

最近どんどん「読むべき blog」系のエントリが増えているので LDR でのフィード購読用スクリプトをコマンドライン化した

$ ./ldr_subscriber.pl http://anond.hatelabo.jp/20101030232110 '.section ol > li > a' | head -8 already subscribed: http://alpha.mixi.co.jp/blog/ already subscribed: http://engineer.dena.jp/ already subscribed: http://labs.gree.jp/blog/ can…

@IT の開発者ブロク紹介エントリをスクレイピングして LDR に突っ込む

ここ数日、開発者ブログの紹介エントリを良く見るようになってきました。例えば、@IT にも以下のような記事があります。 いま購読するべき15の開発者ブログ - @IT RSS Reader を使っている人は「OPML を提供してくれればいいのによー」と心から思っているに…

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…