2010年08月12日(木)<< 前の日記 | 次の日記 >>
この日の詳細

■1Catalystで携帯サイトを作る[WebApp][Perl][Catalyst] このエントリーをはてなブックマークに追加

前回の記事[http://www.nantoka.com/~kei/diary/?20100724S1] でCatalystを触りだして、実際に何か作ってみるのが一番だろうという事で、携帯サイトを作り始めているのだけれども、これはなかなかサンプルとしては良かった。
例えば、携帯の場合、静的なHTMLに見えても絵文字や機種ごとの細かい違いに対応するために、実は動的にコンテンツを作る方がメンテナンスが楽だったりする。
sub html :LocalRegex('^([a-zA-Z0-9_]+).html$') {
    my ( $self, $c ) = @_;

    my $name = $c->request->captures->[0];
    my $file = $c->path_to("root/keitai/$name.html.tt");
    if (-e $file) {
        $c->stash->{template} = "keitai/$name.html.tt";
        $c->response->headers->header('Cache-Control' => 'maxage=86400');
        return 1;
    }
    $c->response->body( 'Page not found' );
    $c->response->status(404);
    return;
}
みたいな感じで簡単にテンプレート化できるし、Catalyst::Plugin::Private::KeitaiEnc なんていうのを用意してやって、Shift_JIS対応も複数キャリアの絵文字対応もそれなりにできちゃう。
で、今日、ちょっと困ったネタが、auのCookie。
どうもCookieの有効期限が効いてくれない気がするので、 EZwebのCookieの仕様[http://www.au.kddi.com/ezfactory/tec/spec/cookie.html] を調べてみたら、
有効期限の指定方法
Cookieの有効期限はHTTPレスポンスヘッダの「Set-Cookie」フィールドの「max age (有効残存秒数) 」で指定することができます。
と書いてある。
Catalystの$c->response->cookiesは、最終的にCGI::Simple::Cookieを使って、Catalyst/Engine.pmのfinalize_cookiesで、Set-Cookieヘッダを作っているので、介入の余地は無さそう。
手としては、$c->response->cookiesにCGI::Simple::Cookieの、Max-Ageを出力する派生物を入れるのだろうけど、ちょっと大がかり。
しばらく考えて、$c->stash->{mycookies}に入れておいて、endでSet-Cookieヘッダ自力で作るようにして解決。

■ 関連記事

詳細はこの日の詳細から

2005年08月12日(金)<< 前の日記 | 次の日記 >>
この日の詳細

■1 C/C++ developers: XMLツールボックスの中身を充実させる[http://www-6.ibm.com/jp/developerworks/xml/020118/j_x-ctlbx.html#table2]次の記事 >> このエントリーをはてなブックマークに追加

SAXを使うならexpatだと決めてかかっていたのですが、他の候補が無いかと調べていて見つけたのでメモ。DOMが必要だったら、C++では辛い。

■ 関連記事

■2 おとまり[http://www.meitetsu-inn-nagoyakanayama.jp/]<< 前の記事 このエントリーをはてなブックマークに追加

名鉄イン名古屋金山。
感心したことがあって、「限りある資源を大切にするために、使い捨ての○○を置くのを控えさせて頂いております」と書いてあるホテルは最近増えているのだけど、分別ゴミ箱を客室に置いているのは初めて気が付いた。多分、今まで置いてあった事は無いと思う。
ホテルによっては、ゴミ箱に明確に捨てていないと、ゴミとして処分しないことがあるので *1 分けるだけだから分別しようとする気持ちと *2 、分けてゴミ箱の隣に置いたら判断に困るかも知れないという不安を感じながら、どうやって置いたら良いかと心配しなくて済むのは助かる。
こういう分別の工夫がトータルとしてコストを減らすかどうかは、普及していないところをみると分からないけれども、環境負荷を下げるという課題に対して真剣に、分別のためのコストを受け容れつつ取り組んでいるという姿勢を示す意味では、簡単な様だけれども重要な取り組みだ。
*1: ひょっとしたら、紙くずに見えても宿泊客にとっては重大なメモかも知れない。
*2: ゴミを出す本人は分けて置くだけだけれども、分別する人は他人が混ぜこぜに入れたゴミに手を突っ込んで分けないといけない。

■ 関連記事

詳細はこの日の詳細から

2003年08月12日(火)<< 前の日記 | 次の日記 >>
この日の詳細

■1 続・Web日記的読書録[http://www.nantoka.com/~kei/diary/?200308b&to=200308111#T200308111][hns]次の記事 >> このエントリーをはてなブックマークに追加

ちょっと調べてみました。
  • Amazon Web Service (AWS)というのがあり、これを使って書籍の情報が取得できる。
  • AWSのSDKが公開されている。サンプルソースもある。
  • XML over HTTP で実現されている。
  • SOAPとか勉強すると良いらしい。
で、 ほそかわさんとこ[http://fromto.cc/hosokawa/diary/2003/20030727-home2/index.html] のページを参考にしつつ、ISBNコードで書誌情報を取得するライブラリをごそごそ実装。

実験:

HNSAWS.pm:

こんな感じ。まだcvsタグも付いていない。
MY_AMAZON_TAGやら、MY_AMAZON_DEVTOKENは、適宜置き換えること。 ウチでは、
--- webif.cgi.orig      Tue Aug 12 21:43:23 2003
+++ webif.cgi   Tue Aug 12 21:48:58 2003
@@ -29,6 +29,7 @@

 use HNS::Admini;
 use HNS::System;
+use HNSAWS;

 require 'jcode.pl';
 require './config.ph';
@@ -262,6 +263,7 @@
     }

     chomp($text);
+    $text = HNSAWS::replace($text);

     my $body;
     if ($Mode == 0) {
みたいな感じで、textを置き換えて使っています。
#==============================================================================
#	HNSAWS.pm	hns の webif で Amazon Web Service の情報を挿入
#		$Id: d20030812.hnf,v 1.1 2009/09/23 12:57:31 kei Exp $
#==============================================================================
package	HNSAWS;

use SOAP::Lite;
use strict;
use Jcode;
use LWP::Simple;

#------------------------------------------------------------------------------
#	取得したアカウントに応じて書き換える
#------------------------------------------------------------------------------
# アソシエイツID
my $MY_AMAZON_TAG		=	'keisdiary-22';

# デベロッパートークン
my $MY_AMAZON_DEVTOKEN	=	'DDHPHE04VROHE';

# cover image 格納ディレクトリ(ファイルシステム)
my $COVERIMG_DIR	=	'../coverimg';

# cover image 格納ディレクトリ(Web上)
my $COVERIMG_URI	=	'/~kei/coverimg';

# AmazonへのリンクURL
my $AMAZON_LINK	=	'http://www.amazon.co.jp/exec/obidos/redirect?tag=keisdiary-22';

# アソシエイト・プログラムへのリンクURL
my $ASOC_LINK	=	'http://www.amazon.co.jp/exec/obidos/subst/associates/join/associates.html/ref=cs_gw_bn_as_1_1/250-2208213-6925017';


#------------------------------------------------------------------------------
#	お好みで書き換える
#------------------------------------------------------------------------------
# WSDL
my $WSDL	=	'http://soap.amazon.com/schemas3/AmazonWebServices.wsdl';

# カテゴリ対応
my %CATEGORIES	=	(
	'books-jp' => '本',
	'music-jp' => '音楽',
	'classical-jp' => 'クラシック',
	'vhs-jp' => 'ビデオ',
	'dvd-jp' => 'DVD',
	'software-jp' => 'ソフト',
	'videogames-jp' => 'ゲーム'
);


#------------------------------------------------------------------------------
#	渡された入力テキストを書き換える
#------------------------------------------------------------------------------
sub	replace($) {
	my ($text) = @_;

	$text =~ s/^AWS ([0-9A-Za-z\-]+)\s+([0-9A-Za-z\-]+)\s+$/makeText($1, $2)/emg;
	return $text;
}


#------------------------------------------------------------------------------
#	ASINから置き換えテキストを生成
#------------------------------------------------------------------------------
sub	makeText($$) {
	my ($category, $asin) = @_;
	my ($sasin, $text);

	$sasin = $asin;
	$sasin =~ s/[^0-9A-Z]//g;
	my $res = amazonSoapQuery($sasin, $category);
	if (! $res) {
		return "! AWS $category $asin";
	}

	if (($res) && ($res->{Details})) {
		my ($d, $limg, $mimg);

		$d = $res->{Details}[0];

		$text = "! AWS $category $asin\n" . 
			"DIV aws\n";

		# カバー画像
		$mimg = fetchCoverImage($sasin, $d->{ImageUrlMedium}, 0);
		if ($mimg) {
			$limg = fetchCoverImage($sasin, $d->{ImageUrlLarge}, 1);
		}
		if ($limg) {
			$text .= "LIMG $COVERIMG_URI/$limg r $COVERIMG_URI/$mimg 表紙画像\n";
		}
		elsif ($mimg) {
			$text .= "IMG r $COVERIMG_URI/$mimg 表紙画像\n";
		}

		$text .= "LINK " . $d->{Url} . " " . jcode($d->{ProductName}, 'utf8')->euc . "\n";
		$text .= "~\n~\n";
		$text .= "著者:";
			my $cnt = 0;
			foreach my $author (@{$d->{Authors}}) {
				if ($cnt) {
					$text .= ', ';
				}
				$text .= jcode($author, 'utf8')->euc;
				$cnt++;
			}
			$text .= "~\n";
			$text .= "出版社:" . jcode($d->{Manufacturer}, 'utf8')->euc . "~\n";
			$text .= "定価:" . jcode($d->{ListPrice}, 'utf8')->euc . "~\n";
			$text .= "ASINコード:" . jcode($d->{Asin}, 'utf8')->euc . "~\n";
			$text .= "~\n";
			$text .= "※上記のリンクは\n" .
				"LINK $AMAZON_LINK Amazon.co.jp\n" .
				"LINK $ASOC_LINK アソシエイト・プログラム\n" .
				"を利用しています。\n";
			$text .= "/DIV\n! AWS-END\n";
		return $text;
	}
	return "! AWS $category $asin";
}


#------------------------------------------------------------------------------
#	クエリー発行
#------------------------------------------------------------------------------
sub amazonSoapQuery($$) {
	my ($asin, $category) = @_;
	my $res;

	eval {
		my $s = SOAP::Lite->service($WSDL);
		$res = $s -> AsinSearchRequest(
			SOAP::Data->name('AsinSearchRequest')
				->type('AsinRequest')
				->value(\SOAP::Data->value(
					SOAP::Data->name('asin'		=> $asin),
					SOAP::Data->name('page'		=> 1),
					SOAP::Data->name('mode'		=> $category),
					SOAP::Data->name('tag'		=> $MY_AMAZON_TAG),
					SOAP::Data->name('type'		=> 'lite'),
					SOAP::Data->name('devtag'	=> $MY_AMAZON_DEVTOKEN),
					SOAP::Data->name('locale'	=> 'jp'),
					SOAP::Data->name('format'	=> 'xml'),
					SOAP::Data->name('version'	=> '1.0'),
				)
			)
		);
	};
	return $res;
}


#------------------------------------------------------------------------------
#	カバー画像の取得と格納
#------------------------------------------------------------------------------
sub fetchCoverImage($$$) {

	my ($asin, $url, $is_large) = @_;
	my ($file);

	if ($is_large) {
		$file = "asin$asin" . "_L.jpg";
	}
	else {
		$file = "asin$asin" . "_M.jpg";
	}
	if (-e "$COVERIMG_DIR/$file") {
		return $file;
	}
	if (is_success(getstore($url, "$COVERIMG_DIR/$file"))) {
		return $file;
	}
	return;
}


1;

■ 関連記事

■2最近読んだ本[book]<< 前の記事 このエントリーをはてなブックマークに追加

うまく動きますように 会議がうまくいかない原因のリアルな分析がしてあって、納得。 方法論的には、ファシリテーター(会議を運営する人)と書記(みんなのために記録を取る人)を用意することによって、
  1. ファシリテーターによって会議のリーダーと議事進行を切り離す
  2. 書記によってみんながメモを取らなくて良くて共通の記録ができる
ということで問題解決するアプローチ。 マイクロソフトに代表される先進的IT企業の採用試験の話。
マイクロソフトというより「北に1Km、東に1Km、南に1Km。元の点に戻る点がありますか?」「富士山を移動するにはどうすれば良いでしょう?」「太陽は常に東から昇りますか?」「赤い帽子。白い帽子。」等、おなじみの問題が、採用試験ではどういう様に使われているかという興味から閲覧。
過去にやったことではなくて、これからできる(かも知れない)能力を見るためには、論理パズルや思考実験が活用できそう。
面接試験で論理パズルや設計問題を出題して、その人のアプローチを観察することは、その人の可能性を計る上では参考になることが多いと思う。
ただしMS社も新卒者ではなく経験を重視した採用をやる時にはパズルを使っていないし、パズルで能力を計るためには計る側にもスキルが必要。
パズルの出題と解説も十分な量がついているので、パズル本と思って読んでも良いかも。 テクニック的には「スゴイ!」ってことは出てこないのだけれども、実践に裏打ちされた自信には、守る立場からも学ぶところがあると思う。 守る立場からは、自信たっぷりの人には弱いってことを再認識させられる。 守る立場にいたとして、「この時自分だったらどうすれば良いだろうか」「どう教育しておけば大丈夫だろうか」という教材にすると、何度でも楽しめる。 と同じで、何度も読み返して味が出るバイブル(?)的存在かも知れない。 キーワード「安値入札」「自治体のIT発注システム」「ライフサイクルコスト」「中立的なコンサルタント」 コミックも大丈夫かな。こういう考えさせられる系のコミックは買い出すと、離れられなくなってしまう。
結局、出ている全巻揃えてしまった。 しかも、 まで買って来てしまった。 まぁ、人生考えるために生きているわけだから、コミックというラクに入れる方法で問題意識を持てるのは良いことだと思う。
そういう視点では、山本おさむさんの、 とか、 にも感動したし、それによって視野が広がったと思う。

■ 関連記事

詳細はこの日の詳細から

2002年08月12日(月)<< 前の日記 | 次の日記 >>
この日の詳細

■1GPS位置情報からのリンク[GPS]次の記事 >> このエントリーをはてなブックマークに追加

ちょっと調べてみる。
モーバイルインフォサーチ2[http://www.kokono.net/] NTTソフトウェア研究所の公開実験。 URL仕様[http://www.kokono.net/spec.html] が公開されていて、GPS位置情報から、地名や最寄の駅が取り出せる。
MapFan Web[http://www2.mapfan.com/mfwtop.html] 有名どころのインターネットで閲覧できる地図。 有料サービスとして、 MapFan on Page[http://www.incrementp.co.jp/mapfan/onpage/] というのをやっている。 インターネットで使っている無料版の引数に関しても、有料版の 技術情報[http://www.incrementp.co.jp/mapfan/onpage/support/support.htm] がヒントになるかも知れないが、MapFanが想定している使い方ではないかも知れない。
ここギコ[http://www.kokogiko.net/] の情報が参考になるかも知れない。

僕ならばここにいる[http://www.suplex.gr.jp/~hourin/koko/]:

のニセモノを作りたいので情報収集をしているわけなのです。
jus東海研究会での発表資料[http://www.suplex.gr.jp/~hourin/justokai200110/koko.html] に、Webで閲覧できる地図データっていう項目がありました。

■ 関連記事

■2今日の写日記[写日記]<< 前の記事 | 次の記事 >> このエントリーをはてなブックマークに追加

こんなのが作りたいと妄想中。 位置情報を入れて写真撮って、Emailに添付して送ると、こんなセクションができるみたいな。

カラーチャート:

必要なてくのろじ:

  • mail2nikkiっぽいインターフェイス(perlで書いちゃう)
  • メールからmimeエンコードされたjpegファイルを取り出す(問題なし)
  • jpegファイルからGPS情報を取り出す(資料あり、要作成)
という訳で、 Exif Version 2.1 specification[http://www.pima.net/standards/it10/PIMA15740/exif.htm] でも読むか。

■ 関連記事

■3SYA!nikki[SYA!nikki]<< 前の記事 このエントリーをはてなブックマークに追加

1838 紅葉亭:

2132 紅葉亭の夜景:

1850 卓袱料理:

「尾鰭(お吸い物)をどうぞ」から、お料理はこんな感じからスタート。まだ前菜。右下は煮豆。
貿易の関係で砂糖が入手しやすかったので砂糖を使った料理が多いのと、
ポルトガル、オランダ、中国、そして日本と、多国籍な文化が交じり合った謎の料理が出てくるのが特徴。
卓袱料理
長崎県長崎市立山5丁目 のあたり by MIS2[http://www.kokono.net/] [ MapFan[http://www.mapfan.com/index.cgi?MAP=E129.52.53.05N32.45.30.55&ZM=7] | Mapion[http://www.mapion.co.jp/front/Front?el=129/52/53.050&scl=10000&pnf=1&uc=1&grp=all&nl=32/45/30.550&size=500,500] | 国土地理院[http://mapbrowse.gsi.go.jp/cgi-bin/nph-blsearch.cgi?b=324542.60&l=1295244.92] | 日本測地系[http://mapbrowse.gsi.go.jp/cgi-bin/nph-blsearch.cgi?b=324530.55&l=1295253.05] | MIS2[http://www.kokono.net/index.cgi?NL=32.45.30.55&EL=129.52.53.05&from=SYAnikkiLink] ]

■ 関連記事

詳細はこの日の詳細から

以上、12 日分です。

指定日の日記を表示

前月 2020年01月 翌月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

最近の日記

2019年04月01日

新元号「令和」について

2019年03月23日

DXアンテナ ワイヤレスチューナー メディアコンセント DMC10F1

2019年02月17日

#例のグラボを活用する

2019年01月03日

シリーズ5・myHomeAlexaで自分のCDをかける

2018年12月25日

シリーズ4・英語の楽曲・アルバム・アーティスト名をカタカナに直す

2018年12月23日

シリーズ3: Echo Dotがやってきた

2018年12月19日

続・Echo Dotがやってきた

分野別タイトル一覧


全て
CLIP
SYA!nikki
book
freebsd
hns
magic
おさけ
おしごと
お買いもの
ぐる
ごはん
アクセシビリティ
オープンソース
セキュリティ
音楽
地域情報化
電子自治体
日記

予定

    ToDo

      link

      keikuma on Twitter

      keikuma Name:前田勝之
      Location:長崎市
      Web:http://www.nantok...
      Bio:前田勝之(まえだかつゆき)。長崎在住。コンサル、SE、プログラマー、 なんとか株式会社代表、非常勤講師(情報セキュリティ)。 セキュアド、テクニカルエンジニア(SV,NW)。サーバ管理とWeb日記を10年ほど。 ネットとリアルの接点に関心あり。食べること・歌うこと・愛すること・作ること・飲むこと。おいしいものがぜんぶすき。

      サイト内検索

      Google AdSense

      Powered by hns-2.19.9, HyperNikkiSystem Project