Yusukebe::Techスタート
プログラミングなどに関する雑多なエントリーはこちらにポストすることにしていこうかと思います。
プログラミングなどに関する雑多なエントリーはこちらにポストすることにしていこうかと思います。
引用
#!/usr/bin/perl -w use strict; print <<END; <html><body> <h1>Hello! スーパーpre記法.</h1> </body></html> END
やべ知らなかった。DECON関係のレポート見て発見したPagentとscreen使い始めた。俺にとっての遠隔ログイン革命だ。以下参考にしたサイト。
ちなみに.screenrcはこんな感じ。
escape ^t^t altscreen on hardstatus string "%H: %w"
ffmpeg関係のパッケージがあるapt-lineは以前こんな感じでいけてたのだけども、
deb ftp://ftp.nerim.net/debian-marillat/ sarge main
最近アドレスが変わったらしい。
(Verified) various packages such as mplayer,acroread...for unstable, testing and stable source packages are also given. (Added 2006-06-19, last checked 2006-06-20) (Download as text)
The debian-marillat repositories has moved to a new URL (previously at ftp.nerim.net) Packages in database: acidrip, acroread, acroread-escript, acroread-plugins, anyevent-perl, argyll-bin, autopano-sift, avidemux, babytrans, babytrans-common, ...
以下でいける。
deb http://www.debian-multimedia.org stable main deb http://www.debian-multimedia.org testing main deb http://www.debian-multimedia.org sid main deb http://www.debian-multimedia.org experimental main deb-src http://www.debian-multimedia.org sid main
Plaggerのconfig.yamlはBOM無しのUTF-8Nで保存すること。
Plaggerのconfig.yamlで最初Filter::TruePermalinkをFilter::EntryFullTextの後ろに書いていてたのだけど、するとURLにsession idが含まれるページとか毎回linkが変わってしまうのでキャッシュでヒットしてなかった。というマイナーな悩みを抱えてた。単純に、 F::TruePermalinkをF::TruePermalinkより前に書けば解決したっぽい。
- module: Filter::TruePermalink config: follow_redirect: 0 - module: Filter::EntryFullText
その代わり、EntryFullTextでhandleするURLはTruePermalinkで修正したURLを指定すること。。。。むむ、違う問題が発生した。あんまり推奨できないな。。。
ダウンロード: Consolas Font Pack
あるアイデアがあってGoogle Maps APIで取得した緯度経度情報から住所を取得したいんだけど、 結局これが一番簡単な方法なのかも。 緯度経度を元にYahoo!地図へのURLを生成してそのページのタイトルを引っこ抜く。 日本にしか対応していないのと、精度が悪い(?)という問題があるけど、結構いける。
#!/usr/bin/perl
use strict;
use LWP::Simple;
use HTML::TokeParser;
my $nl;#緯度
my $el;#経度
my $address;
#江ノ島付近
$nl = "35.29892761543741";
$el = "139.48415994644165";
my $url = "http://map.yahoo.co.jp/pl¥?nl=$nl&el=$el";
my $data = get($url);
my $p = HTML::TokeParser->new(¥$data);
if($p->get_tag("title")){
$address = $p->get_trimmed_text;
}
$address =~ s/(Yahoo!地図情報)|( - )|(の周辺地図)//g;
print "$url¥n";
print "$address¥n";
実行結果はこんな感じ
http://map.yahoo.co.jp/pl?nl=35.29892761543741&el=139.48415994644165 神奈川県藤沢市江の島2丁目
Plaggerを使って、自分のはてなブックマークをMTのサイドバーに表示する。 Publish::MTWidgetを使ってみる。以下config.yaml
global: timezone: Asia/Tokyo assets_path: /home/yusuke/var/plagger/assets log: level: info plugins: - module: Subscription::Config config: feed: - url: http://b.hatena.ne.jp/kamawada/rss - module: Filter::Rule rule: module: Fresh limit: 1days - module: Publish::MTWidget config: blog_id: 2 mt_path: /path/to/mt rebuild: - メインページ
はこべさんのところで知ったCatalystのViewヘルパースクリプトTTSiteを使ってみる。
$ ./script/myapp_create.pl view TT TTSite
すると、rootディレクトリの下にTemplate Tookitの雛形を作ってくれる。
$ ls -l total 16 -rw-r--r-- 1 yusuke yusuke 2551 Sep 18 22:45 favicon.ico drwxr-xr-x 4 yusuke yusuke 4096 Sep 19 2006 lib drwxr-xr-x 2 yusuke yusuke 4096 Sep 19 2006 src drwxr-xr-x 3 yusuke yusuke 4096 Sep 18 23:02 static
libディレクトリには設定ファイル、srcにはTTファイルができる。 myapp.ymlに
View::TT: INCLUDE_PATH: - 'root/src' - 'root/lib'
としてディレクトリをView::TTのINCLUDEパスに含める。これで準備おけー。 自前の.ttファイルにもヘッダーとフッターをつけてくれて、それっぽい見た目にしてくれる。 見た目を変えたかったら設定を変えればよい。 例えばコントローラのRoot.pmでサンプルmessage.tt2を動かしてみる。
sub message : Local {
my ( $self, $c) = @_;
$c->stash->{message} ||= $c->req->param('message') || 'No message';
$c->stash->{template} = 'message.tt2';
}
自前の.ttもbodyの中身を書けばヘッダとフッタが付いたHTMLを出力してくれる。 所詮ヘルパースクリプトなのでそのまま実用的なサイトで使うことはないにしろ、Template Toolkitをうまく使う方法として参考になるね。以下は中身が「テストですよ」のみの.ttを表示させた例。
-short use short names, M/V/C instead of Model/View/Controller.
しらなかった
http://www.debian-multimedia.org レポジトリからインストールできるstableのffmpegでは WMV3に対応していないので最新版のWindows Media形式のビデオなどをエンコードできない。 なので最新版をとってきてソースからインストールする。 その前にビルドに必要なライブラリーはapt-getでインストール。apt-lineに
deb http://www.debian-multimedia.org stable main
を追加。うちの環境だと以下の手順が必要だった。
# apt-get install libdts-dev # apt-get install libgsm1-dev # apt-get install liblame-dev # apt-get install libvorbis-dev # apt-get install libxvidcore4-dev # apt-get install libx264-dev # apt-get install libfaac-dev # apt-get install libfaad2-dev
うんでいよいよソースをもってきてビルド。configureオプションは適当にこんな感じ。
$ svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg $ cd ffmpeg
./configure --disable-network --disable-ffserver --disable-ffplay --enable-shared ¥ --enable-mp3lame --enable-gpl --enable-faad --enable-vorbis --enable-pthreads ¥ --enable-faac --enable-xvid --enable-dts --enable-amr_nb --enable-amr_wb --enable-pp¥ --enable-libogg --enable-libgsm --enable-x264 --enable-a52 --enable-a52bin
configureが終わると以下のようなメッセージが出るので言われたとおりにやる。
AMR WB FLOAT NOTICE ! Make sure you have downloaded TS26.204
V5.1.0 from
http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-510.zip
and extracted the source to libavcodec/amrwb_float
AMR NB FLOAT NOTICE ! Make sure you have downloaded TS26.104
REL-5 V5.1.0 from
http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip
and extracted the source to libavcodec/amr_float
そんで
$ make # make install
あとは、/etc/ld.so.confに/usr/local/libを追加してldconfigを実行。
$ ffmpeg -formats
をすると、wmv3にも対応していることが確認できて、ちゃんとエンコードできたました。
このYusukebe::TechではMT3.3xで標準となったタグ機能を使ってエントリーの分類をしていますが、 そのタグ付け情報そのままをTechnoratiへ送る簡単な方法を試してみる。 Technorati Help: Tagsより
If your blog software supports categories and RSS/Atom feeds (like Movable Type, WordPress, TypePad, Blogware, Radio), just use the included category system and make sure you are publishing RSS/Atom feeds and your categories will be read as tags.
とのことで、たぶんATOMフィードのcategory要素のterm属性からタグ情報を拾ってきていると思われる。MovableTypeデフォルトのATOMフィードのテンプレートのままだとterm属性にはタグのID番号がついていてlabel属性にタグの名前が入る。このままだとtechnoratiにはタグのID番号、つまりただの数字がタグ情報として送られてしまう。なのでテンプレートを変更。
<MTEntryIfTagged><MTEntryTags><category term="<$MTTagID encode_xml="1"$>" label="<$MTTagName encode_xml="1"$>" scheme="http://www.sixapart.com/ns/types#tag" /> </MTEntryTags></MTEntryIfTagged>
を以下のようにする。
<MTEntryIfTagged><MTEntryTags><category term="<$MTTagName encode_xml="1"$>" /> </MTEntryTags></MTEntryIfTagged>
結構強引なやり方だけど、たぶんこれでうまくいくはず。このエントリーでテスト。
たぶん、できたっぽい。 http://www.technorati.com/tag/movabletype?from=http://yusukebe.com/tech ←これでこのエントリーが確認できるので。
Geo::Coder::YahooJapan なるモジュールがアップされたので早速使ってみる。 Googleのgeocoderは日本の住所で現在検索できないらしく、他のサービスだとgeocoding.jpが有名みたい。 Geo::Coder::YahooJapanは「Yahoo Japan Geocoder API」のラッパー(そんなのあったのね、ウィジェット用みたい)で、日本語の地名で検索→緯度経度取得が可能。
今回は、Geo::Coder::YahooJapanで検索をして、その結果得られた座標点を中心とするGoogle Mapsを表示するってのを作ってみた。方針として極力シンプルに、非同期通信などせずに、得られた座標点をそのままテンプレートに渡して表示、テンプレートはGoogle Maps APIのドキュメントにあるサンプルをあまり変えずにって感じで。
これが動いているサンプル→Geo::Coder::YahooJapan + Google Maps(六本木ヒルズで検索)
これ、検索結果の返りが意外なのがあって結構面白い。 例えば、 japanで検索すると「BEAMSJAPAN」がでてきたり、 江ノ島で検索すると「江ノ島電鉄 七里ケ浜駅」がでてきたり、おれんちがある 鎌倉山で検索すると鎌倉の鎌倉山がでてこないで長野の鎌倉山がでてきたり。 (追記: これはいくつか複数の検索結果から1件だけ取得して表示しているからだとは思う) 以下ソース。
自分用にメモ。Template-Toolkitのシンプルな使い方雛形。
use Template;
my $tt = Template->new;
my $template = <<"EOF";
template text
EOF
$tt->process(\$template,{prop=>\prop,array=>\@array})
|| die $tt>error(), "\n";
知らなかった。Net::Amazonにキャッシュ機能あるなんて・・・ →Net::Amazon CACHING
なんて便利なモジュールなんだ。
お、邦訳版が10月5日発売みたいです。
|
Ajax Hacks ―プロが教えるWebアプリケーション構築テクニック
|
Class::DBI::Pager便利! Class::DBIのPluginモジュールで、データベースにあるオブジェクトを指定した件数ずつ表示させたい時などに使う。例えばはてなブックマーク風のページングとか。
Catalystで使うときは、lib/MyApp/Model/CDBI.pmなどに
package MyApp::Model::Plagger; use strict; use base 'Catalyst::Model::CDBI'; use Class::DBI::Pager;
とuseする。Controllerではモデルのpagerメソッドで1ページあたりの件数を指定してpagerのインスタンスを作り、retrieveできる。
#Controller
my $pager = MyApp::Model::CDBI::Item->pager(20,$page);
my @items = $pager->retrieve_all;
$c->stash->{pager} = $pager;
stashでpagerを渡して、Templateでは以下のようにしたらはてブ風ページング表示が可能。
合計 [% pager.total_entries %] 件<br /> [% IF pager.previous_page %] <a href="?page=[% pager.previous_page %]"> <前の[% pager.entries_per_page %]件</a> [% END %] [% FOREACH num = [pager.first_page .. pager.last_page] %] [% IF num == pager.current_page %][% num %] [% ELSE %]<a href="?page=[% num %]">[% num %]</a>[% END %] [% END %] [% IF pager.next_page %] <a href="?page=[% pager.next_page %]"> 次の[% pager.entries_per_page %]件></a> [% END %]
むむ。ERO Plaのplaggerプロセスが滞ってるっぽいな。 あtopコマンドの時kを押すとプロセスkillできるんだね、今気づいた、こりゃ便利。
iTunes7にアップグレードするとiTunes COMインターフェースが使えなくなった。 マニアックな悩みだ。 これはどうやらiTunes6から7へ上書きアップグレードすると起こる問題らしくて、一度iTunesをアンインストールしてもいちどインストールすると通常のように使える。 にしても7重たいな(再インストしたらちょっとはよくなったっぽい)。
MeadowでConsolasフォントとモトヤシーダ1等幅フォントを使う。 綺麗だ。
以下.emacsの設定、これでいけますよ、という感じ。
(let ((make-spec (function (lambda (size charset fontname &optional windows-charset) (setq size (- size)) (if (not windows-charset) (setq windows-charset (cadr (assq charset mw32-charset-windows-font-info-alist)))) `(((:char-spec ,charset :height any) strict (w32-logfont ,fontname 0 ,size 400 0 nil nil nil ,windows-charset 1 3 0)) ((:char-spec ,charset :height any :weight bold) strict (w32-logfont ,fontname 0 ,size 700 0 nil nil nil ,windows-charset 1 3 0) ((spacing . -1))) ((:char-spec ,charset :height any :slant italic) strict (w32-logfont ,fontname 0 ,size 400 0 t nil nil ,windows-charset 1 3 0)) ((:char-spec ,charset :height any :weight bold :slant italic) strict (w32-logfont ,fontname 0 ,size 700 0 t nil nil ,windows-charset 1 3 0) ((spacing . -1))))))) (make-spec-list (function (lambda (size params-list) (list (cons 'spec (apply 'append (mapcar (lambda (params) (apply make-spec (cons size params))) params-list)))) ))) (define-fontset (function (lambda (fontname size fontset-list) (let ((spec (funcall make-spec-list size fontset-list))) (if (w32-list-fonts fontname) (w32-change-font fontname spec) (w32-add-font fontname spec) ))))) (consolas-fontset-list '( (ascii "Consolas") (katakana-jisx0201 "NFモトヤシータ゛1等幅") (japanese-jisx0208 "NFモトヤシータ゛1等幅") (korean-ksc5601 "Dotum") (chinese-gb2312 "SimHei") (chinese-big5-1 "MingLiU") (chinese-big5-2 "MingLiU") )) ) (funcall define-fontset "Consolas 10" 10 consolas-fontset-list) (funcall define-fontset "Consolas 12" 12 consolas-fontset-list) (funcall define-fontset "Consolas 14" 14 consolas-fontset-list) (funcall define-fontset "Consolas 16" 16 consolas-fontset-list) (funcall define-fontset "Consolas 18" 18 consolas-fontset-list) (funcall define-fontset "Consolas 20" 20 consolas-fontset-list) (funcall define-fontset "Consolas 22" 22 consolas-fontset-list) (funcall define-fontset "Consolas 24" 24 consolas-fontset-list) (funcall define-fontset "Consolas 36" 36 consolas-fontset-list) (funcall define-fontset "Consolas 48" 48 consolas-fontset-list) ) (add-to-list 'default-frame-alist '(font . "Consolas 14")) (set-frame-font "Consolas 14")