YAPC::Asia2013の1日目に参加しました日記

LT開始前のメインホール

 YAPCと書いて「やっぷしー」と読むことを初めて知りました(挨拶)。

 9/19から9/21までの3日間に渡って開催された「YAPC::Asia Tokyo 2013」の1日目に参加してきました。
 最近はすっかりPHPを使うようになってしまった私ですが、WebブログラミングをPerlで覚えた身としてはやはりperlは特別な言語なのです。

 以下概要。



続きを読む

YAPC::Asia 2012で興味を持った技術まとめ

 YAPC::Asia Tokyo 2012の1日目に参加しました。

 YAPCは、自分の中ではPerlやLLの技術を学びに行くというよりは、「技術を楽しむエンジニア者達のお祭りに参加して、自分もその中の一員であるということを再認識し、エンジニアとしての気合を入れ直す」というメンタル的な目的の比重の方が大きいイベントなのですが、今回は実際に試してみたかったり仕事で使えそうな技術的なトピックが沢山あり、そういう意味でもとても為になりました。

 以下、気になったものを、自分のためにメモ。



続きを読む

Digest::SHAがインストールされていないレンタルサーバでSHA256を使用する奇妙な方法

 Amazon Web Service のAPI呼び出しの仕様変更は8/15までに行わないといけないことを知り、今頃になって仕方なく自作のアプリケーションに対して修正を始めました。
 それでAPIを呼び出すためには「SHA256アルゴリズムでクエリ文字列のハッシュをHMAC方式で計算し、base64に変換する」する必要があり、SHA256変換を行うためには perlでは Digest::SHA モジュールを使う必要があるとのことですが、自分が使っているレンタルサーバではインストールされていませんでした。なのでこの手は使えません。

 PHPであれば、標準でHMAC方式で計算を行える hash_hmac 関数が(5.1.2以降では)用意されていて、

	$data = hash_hmac("sha256", $query, $secretkey, true);
	$signature = base64_encode($data);

 と2行だけで処理できてしまいます。さすがPHPは何でもアリだよなあと感心していたのですが、ここで何故か「SHA256でハッシュを計算するところだけPHPで処理させればいいんじゃね?」という電波を受信してしまったのが運の尽き(何故か)。
 引数にクエリ文字列と秘密鍵を受け取り、上記の処理を行うだけのPHPプログラムをサーバ上に用意し、perlではそのプログラムをLWP::UserAgentで呼び出して結果を取得するという方法でやってみることにしました。

PHP – hmac.php

< ?php
	$query = $_POST['q'];
	$secretkey = $_POST['s'];
	$data = hash_hmac("sha256", $query, $secretkey, true);
	echo base64_encode($data);
?>

perl

use LWP::UserAgent;
use HTTP::Request::Common qw(POST);

sub hmac_sha256_base64
{
	my ($q, $secretkey) = @_;
	my %formdata = ('q' => $q, 's' => $secretkey);
	my $request  = POST('http://hmac.phpを置いたサーバ/hmac.php', [%formdata]);
    my $ua = LWP::UserAgent->new();
	my $res = $ua->request($request);
	return $res->content;
}

# $qに変換したいクエリ文字列、$secretkeyにあなたの秘密鍵を設定
my $signature = hmac_sha256_base64($q, $secretkey);

 なお、Digest::SHAがインストールされていないサーバでは、こちらで紹介されているように全てperlで書かれたDigest::SHA::PurePerlをサーバにアップロードして use lib でパスを通して使うのが正解の模様です(手遅れ)。

Wassrの自分の投稿から写真を抜き出してWordPressでフォトログっぽいことするスクリプト

 Yappoさんのこの発言に釣られてWassrを始めてみました。

 Wassrは基本的にTwitterコンパチなサービスなんですけど、Wassrには写真付きのメッセージをメールから投稿できるという特徴があるので、「Wassrに投稿した写真をAPI経由で拾ってWordPressのエントリにすることで、Wassrをこのブログのフォトログ的なフロントエンドとして使うことができるんじゃないの?」と思ってスクリプトを書いてみました。

 →Wassrの自分の投稿から写真を抜き出してWordPressでフォトログっぽいことするスクリプト(08/07/07版)
  ※7/7からXMLのフォーマットが変わったので対応
 →写真表示部分で使っているCSS

 昨日から上がってる「~の写真」というエントリが、これで作ったものです。

 WordPressにもメール経由で写真を投稿するプラグインは既にあるのですが、1日単位で写真をまとめて1エントリにしたかったので作った次第です。
 あと、Wassr API叩きたくて仕方がなかったのも動機。APIがあれば叩きたくなるのが普通ですよね(ですよね?)。

 ちなみに、自分のWassrのアカウントはhttp://wassr.jp/user/fukaz55です。
 購読・解除はご自由にどうぞー

XserverでXML::Simpleを使うと「could not find ParserDetails.ini」エラーが発生する

 メモ。
 現在Xserverで「Amazon Web Servicesを叩いて取得したXMLをXML::Simpleモジュールを使って処理する」スクリプトを作っているのですが、実行したら「could not find ParserDetails.ini in ~」で始まるエラーが発生してしまいました。
 XMLのパースで使用するXML::LibXML::SAXパーサーの設定ファイルがないよ? みたいな意味らしい。

 こちらはXMLをパースできればパーサーは何でもいいので、こちらのエントリを参考にして、XML::Parserを使用するようにプログラムを修正して対応しました。
 具体的にはこんなコード。

$XML::Simple::PREFERRED_PARSER = 'XML::Parser';
my $data = XMLin($content);