まだ重たいCMSをお使いですか?
毎秒 723リクエスト を捌く超高速CMS「adiary

2012/09/28(金)Perlの型グロブと名前空間アクセスの応用

Perlの名前空間と型グロブに関する応用的な話です。高度な内容ですので、少なくともリファレンスについては理解している人向けです。型グロブも多少知らないと難しいかもしれません。

※以下特に断りがない限りPerl 5.10での動作確認です。

続きを読む

2012/08/22(水)input type="text"等の自由リサイズスクリプト

Google ChromeやFirefoxには標準で<textarea>の自由リサイズ機能(マウスでのリサイズ機能)がありますが、input type="text"等のテキストボックスにはその機能がありません。

jQueryで実装してみました。

使い方

以下のCSSとJavaScriptを導入してください。あとは自動的に機能が導入されます。

  • jQueryを先にロードしてください。必要バージョンは分かりません(苦笑)
  • Google ChromeとFirefoxで動作確認しています。
  • CSSの width が掴める部分のサイズになります。
  • CSSの z-index の下3桁(1000で割った余り)がテキストボックスの最小サイズになります。*1
  • CSSの display:none を有効にするとフォームリサイズ機能を無効にできます。
    • テキストボックスの初期サイズの方が小さい場合はそちらが最小サイズになります。
  • IE6,7で動作しましたが、IE8,9では動作しませんでした(動作しないだけで不具合はありません)。
    • 手前にあるspanよりも裏側にあるテキストボックスが優先される謎の仕様のせいです。

続きを読む

2011/05/25(水)enterでフォ-ム内容を送信させない細工

JavaScript

//-----------------------------------------------------------------------------
// ●enterで送信させない
//-----------------------------------------------------------------------------
// Tested : Fx4, GC, IE7/8
function enter_not_submit(evt) {
	evt = evt ? evt : event;
	var e = evt.target || evt.srcElement;
	if (e.tagName != 'INPUT') return true;
	if (evt.keyCode == 13) return false;
	return true;
}

フォーム側

<form action="" method="POST" onkeypress="return enter_not_submit(event);">
	(フォーム内容)
</form>

Formに仕込むだけです。INPUTタグやSubmitボタンの細工は不要。

全INPUT要素を探し出してイベントを登録するハンドラのような無駄な処理も不要。

2010/08/18(水)Pure PerlでのOAuth実装メモ

adiaryに、twitter投稿のためのOAuthを実装したときのメモです。PurePerl動作。

OAuthモジュール(OAuth::Lite::Consumer)を使わずに実装したので、同じことをやりたい人には参考になるかと思います。*1

続きを読む

2010/08/12(木)Digest::SHA を使って HMAC-SHA1 を生成するPerlのコード

Digest::SHA ないしは Digest::SHA::PurePerl を使います。よって PurePerl でも動作します。

HMAC署名についてはwikipediaを参照

sub hmac_sha1 {
	# my $self = shift;
	my ($key, $msg) = @_;
	my $sha1;

	if ($Digest::SHA::PurePerl::VERSION) {
		$sha1 = Digest::SHA::PurePerl->new(1);
	} else {
		eval {
			require Digest::SHA1;
			$sha1 = Digest::SHA1->new;
		};
		if ($@) {
			require Digest::SHA::PurePerl;
			$sha1 = Digest::SHA::PurePerl->new(1);
		}
	}

	my $bs = 64;
	if (length($key) > $bs) {
		$key = $sha1->add($key)->digest;
		$sha1->reset;
	}
	my $k_opad = $key ^ ("\x5c" x $bs);
	my $k_ipad = $key ^ ("\x36" x $bs);
	$sha1->add($k_ipad);
	$sha1->add($msg);
	my $hk_ipad = $sha1->digest;
	$sha1->reset;
	$sha1->add($k_opad, $hk_ipad);

	my $b64d = $sha1->b64digest;
	$b64d = substr($b64d.'====', 0, ((length($b64d)+3)>>2)<<2);
	return $b64d;
}

最後に「====」を付けてやるのがポイントで、これがないとOAuthで盛大にコケます。

なおこのソースコードはPDS扱いとします。

OK キャンセル 確認 その他