2007年7月アーカイブ
sub _isValidDate : Private {
my $date = shift;
my @days = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
$date =~ /^(2[0-9][0-9][0-9])([01][0-9])([0-3][0-9])$/;
my $year = $1;
my $month = $2;
my $day = $3;
# 閏年の判定
if( _isLeapYear( $year ) ){
$days[1]=29;
}
# 月の判定: 1 月から 12 月まで
if( $month < 1 || $month > 12 ){
return 0;
}
# 日の判定: 1 日から $days[$month-1] まで
if( $day < 1 || $day > $days[$month-1] ){
return 0;
}
return 1;
} # end of _isValidDate() if( defined $data{date} ){
if( $data{date} =~ /^2[0-9][0-9][0-9][01][0-9]$/ ){
# YYYYMM
$date = $data{date} . '01';
if( SecureSBMLib::_isValidDate( $date ) ){
$where = 'date_trunc(\'month\',user_bookmark_ts)';
}
}elsif( $data{date} =~ /^2[0-9][0-9][0-9][01][0-9][0-3][0-9]$/ ){
# YYYYMMDD
$date = $data{date};
if( SecureSBMLib::_isValidDate( $date ) ){
$where = 'date_trunc(\'day\',user_bookmark_ts)';
}
}else{
# Error
}
}
my @bms;
if( defined $where ){
@bms = $ubdb->search({$where => $date},
{order_by => 'user_bookmark_ts DESC'})
->slice( $start, $start + $entrynum - 1 )
}else{
@bms = $ubdb->search(undef, {order_by => 'user_bookmark_ts DESC'})
->slice( $start, $start + $entrynum - 1 );
}
Keyword: Perl Catalyst Secure-SBM SSBM セキュア・ソーシャル・ブックマーク オープンソース
いかちょー (2007-07-31 21:02) | コメント(0)| トラックバック(12)
いかちょー (2007-07-30 12:41) | コメント(0)| トラックバック(10)
さて,社内ソーシャルブックマーク(SBM)のお話.しばらくご無沙汰でしたが,もう少しつめていくことにします.
やりたいこと:
- 面白いことを見つけたら URI を SBM に登録する.
- 登録した URI に「ラベル」をつけられる.
- 登録した URI に「コメント」をつけられる.
- 登録した URI を「ラベル」で一覧できる.
- 登録した URI の「コメント」を検索できる.
- 登録する URI に「タイトル」が自動的につく.
- 登録する URI の「タイトル」を変更できる.
- 登録した URI の「タイトル」を検索できる.
- 登録した URI の参照先の内容を検索できる.
- 登録した URI を他人と共有できる.
- 登録した URI の一覧を RSS/ATOM で配信できる.
- 登録した URI の一覧を(限定した)他人に公開できる.
- 登録した URI に「システムラベル」が自動的につく.
- 登録した URI の参照権限の管理ができる.
- 登録した URI のアクセス管理ができる.(このあたりが情報セキュリティ)
- 登録した URI の更新ができる.
- 同じ URI を何度も登録できる.
- 複数の同じ URI を表示する場合は,どれが最後に登録したものかすぐにわかる.
- URI の登録日時がわかる.
- 他の誰が URI を登録しているのかわかる.
- 自分がその URI を登録していることを他者から隠すことができる.
- URI 一覧を「ブックマーク」として利用できる.
- URI を無制限に登録できる.
- URI 一覧の表示方法をいくつか変えられる.
思いつくままに書いてみましたが,こんなところですか.URL ではなく,URI と書いたのは,tPod との連携を想定しているからです.ホームページだけでなく,tPod が管理するファイルを「ブックマーク」として扱うことで,情報共有の幅が広がりそうです.tPod 側のインターフェースはまだそこまで用意されていませんので,これはあくまでも私の希望です.
簡単なところから始めるとして,他に要件(要求)がないかどうか整理することにします.
いかちょー (2007-07-29 09:00) | コメント(0)| トラックバック(6)
をご覧ください.結構丁寧に細かい部分までインストール方法を書いたつもりです.
ご要望,ご意見,不具合のご連絡は「チケット登録」からお気軽に登録してください.
Version 0.4 で予定している作業項目はこんな感じです.(全部できるのか?)
さてここで,改めて Secure-SBM (セキュア・ソーシャル・ブックマーク)とは何なのか を書いておきます.
Secure-SBM は,「セキュア」 である前に,「ソーシャル・ブックマーク」です.「ソーシャル・ブックマーク(以下 SBM)」とは他人とブックマークを共有するものですが,それによって 集合知 や 暗黙知 を見えるようにしようというものです.あるいは自分の知らなかった情報を(他人のブックマークによって) 発掘 するということにも使えます.SBM は 「はてな」 や 「del.icio.us」 などが有名ですが,これらの SBM は一般公開されており,同一サイトがどれだけの人にブックマークされているのかがわかるようになっています.多くの人にブックマークされている 人気サイト や急激にブックマークされている ホットサイト などがわかるようになっているものがほとんどです.ブックマークに対してコメントがつけられるようになっていて,他人のコメントが読めることも SBM の特徴の一つです.
お互いにブックマーク情報を共有/交換できるということは,探す手間が省け, 生産性向上 にもつながります.そのためには,自分でもどんどんブックマークして有益な情報を集める必要があります.
個人だけで考えた場合,どんどんブックマークしてタグを付けていき, 後でまとめて読む などの方法で使うことができます.論理的に 無尽蔵なブックマーク であると同時に,ブラウザのお気に入りなどとは異なり 整理せずにブックマーク することができます.つまり,このタグによる検索や,タイトルの検索などが SBM の主要素の一つになります.この「個人」で使用するツールという部分は SBM の利用を促進する上で重要な役割をもちます.個々人で利用して便利だという利得(インセンティブ)がなければ,誰もブックマークしないので,ブックマークの共有という考え方そのものが破綻してしまうからです.
共有されたブックマークを介して,SNS (ソーシャル・ネットワーク・サービス) のような他人とのコミュニケーションも考えられますが,そこまでやっている SBM はまだないようです.
これを 企業などの組織内で使うことを考えたものが Secure-SBM です.ある組織で使用すると,傾向が偏るはずですが,組織が必要とする情報を誰かが見つけたら,それをブックマークするように習慣を付けておきます.すると, 自分が欲しかった情報を他の人が見つけてくれるかもしれません.大きな組織ではホームページの情報が散逸しているかもしれませんが,必要な情報が SBM によって 人間の目によってフィルタリング され 集約された情報 になっているはずです.
ここで,組織の構成員によって役割や閲覧権限が違う場合,その 情報の存在そのものを隠さなくてはならない 場合があるかもしれません.あるいは,その 組織だけでブックマークを共有したいと考えるかもしれません.そのために Secure-SBM では 「ロール」 という概念を導入し,ブックマークを閲覧できる範囲を限定できるようにしました.この点が Secure の由来 です.
さらに,Secure という特徴を生かして,SNS 的な使い方ができると面白いのではないかと考えています.
バージョン 0.3.0 をリリースしたものの,まだまだ機能が足りません.先進的な技術の部分よりも SBM として持っていて当然の機能 (上に書いた人気リストやホットリストなども) が足りないので,その部分の作業に時間をとられているのが実態です.SBM とし当たり前の機能がそろったときに初めてバージョン 1.0 として世の中に出せるかなと思っています.それまでは 0.x ですね.(0.9 の次は 0.10 です.でもその前には 1.0 として出したいなぁ...)
今後は SBM で集まったブックマークを分析し,情報の偏在傾向やブックマークの 「おすすめ」 などを見れるようにして行きたいと考えていますが,その実装はもう少し先になりそうです.有効な数のブックマークが集まらないというのもあるのですが,なかなか SBM の有用性をわかってもらえないんですよね....とちょっと愚痴...
ダウンロードしてどんどん試していただき,足りない機能 や 使い勝手の悪い点 を チケット登録 していただければ幸いです.ついでに 一緒に開発していただける方がいるともっとよいのですが.公開デモサーバなども徐々に考えていきたいと思います ( 「Tyzoh2.0」 と一緒に公開できるといいですが).
どうぞよろしくお願いいたします.
Keyword: cygwin PostgreSQL Perl Catalyst Secure-SBM SSBM セキュア・ソーシャル・ブックマーク オープンソース Linux
いかちょー (2007-07-27 09:23) | コメント(0)| トラックバック(0)
sub makebackup : Local {
my ( $self, $c ) = @_;
$_ = $c->config->{'Model::SecureSBMDB'}->{connect_info}[0];
my ( $dbi, $dbd, $dbparams ) = split( ':' );
my ( @dbparams ) = split( ';', $dbparams );
my %dbparams;
foreach my $d (@dbparams){
my ( $name, $data ) = split( '=', $d );
$dbparams{$name} = $data;
}
my $dbname = (defined $dbparams{dbname})?$dbparams{dbname}:'';
my $dbuser = $c->config->{'Model::SecureSBMDB'}->{connect_info}[1];
my $dbpwd = $c->config->{'Model::SecureSBMDB'}->{connect_info}[2]; if( $dbd eq 'Pg' ){
my $dbhostopt = (defined $dbparams{host})?
"-h $dbparams{host}":'';
my $dbportopt = (defined $dbparams{port})?
"-p $dbparams{port}":'';
my $dbfileopt = "-f $backuppath";
system( "pg_dump -U $dbuser -F t $dbhostopt $dbportopt
$dbfileopt $dbname" );
my ( $dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size,
$atime, $mtime, $ctime, $blksize, $blocks )
= stat($backuppath);
my ( $sec, $min, $hour, $mday, $mon,
$year, $wday, $yday, $isdst )
= localtime($mtime);
my $filestat
= sprintf( '%s <br />owner:%s group:%s size:%s
<br />mtime: %4d/%02d/%02d %02d:%02d:%02d',
$backupfilename, $uid, $gid, $size,
$year + 1900, $mon + 1, $mday, $hour, $min, $sec
);
$c->stash->{backupfileinfo} = $filestat;
$c->stash->{backupfilename} = $backupfilename;
}else{
# Not implimented
$c->stash->{resultmessage} = 'Not implimented yet';
}
$c->forward('index');
} # end of makebackup()sub getbackup : Local {
my ( $self, $c, $bfname ) = @_;
if( $bfname ne $backupfilename ){
$c->forward('index');
return 0;
}
my $backupfilepath = $backupdir . '/' . $bfname;
my ( $dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size,
$atime, $mtime, $ctime, $blksize, $blocks ) = stat($backupfilepath);
my $bfcontents = '';
if( open( BFH, $backupfilepath ) ){
my $rsize = 1;
while( $rsize && $size > 0){
my $tmp;
$rsize = read( BFH, $tmp, $size );
$bfcontents .= $tmp;
$size -= $rsize;
}
close( BFH );
}
$c->res->headers->header(
'Content-Type' => 'application/x-tar;'
. 'name="' . $bfname . '";' );
$c->res->body( $bfcontents );
$c->forward('index');
} # end of getbackup()
Keyword: Perl Catalyst Secure-SBM SSBM セキュア・ソーシャル・ブックマーク オープンソース
いかちょー (2007-07-26 12:54) | コメント(0)| トラックバック(24)
sub service_disable : Local {
my ( $self, $c ) = @_;
if( _makeLockfile( @_ ) ){
$c->log->debug('Success: make ' . $c->config->{lockoutfile});
}else{
$c->stash->{resultmessage} = 'Cannot make lockfile';
}
$c->stash->{lockout} = 1;
$c->logout;
$c->forward('index');
}
sub service_enable : Local {
my ( $self, $c ) = @_;
if( _deleteLockfile( @_ ) ){
$c->log->debug('Success: delete ' . $c->config->{lockoutfile});
undef $c->stash->{lockout};
}else{
$c->stash->{resultmessage} = 'Cannot delete lockfile';
}
$c->forward('index');
}sub auto : Private {
my ( $self, $c ) = @_;
if( my $sessionid = SecureSBMLib::_isServiceLocked( @_ ) ){
$c->stash->{lockout} = 1;
if( $c->controller eq $c->controller('Noauth::Mentenance') ){
return 1;
}
if ( $c->sessionid eq $sessionid ) {
if( $c->controller eq $c->controller('Admin::ServiceCtl') ){
return 1;
}
}
$c->res->redirect( $c->uri_for('/mentenance') );
return 0;
}else{
...
Keyword: Perl Catalyst Secure-SBM SSBM セキュア・ソーシャル・ブックマーク オープンソース
いかちょー (2007-07-25 11:21) | コメント(0)| トラックバック(10)
相変わらずボットと思われる攻撃数が増加しているようです.SQL Slammer も勢いが衰えませんね.インターネット治安情勢のレポートを見るたびに,自宅の PC は大丈夫だろうかと不安になります.会社の方は情シス部門が頑張ってくれていると信じています.
それにしても,この手のサイトをしばらく見てませんでした.情報セキュリティの情報収集がおろそかに...一日のうち少しの時間でも作って,覗くようにしたいと思っているのですが,なにせ,頭がシングルタスクなので...
こういう有用なサイトを Secure-SBM に登録して(いや,Public なサイトなので,セキュアである必要はないんですが),みんなで共有したいものです(と,さりげなく Secure-SBM の宣伝...え?全然さりげなくない?!).
ところで,日本は「中国」と「台湾」を分けてるんだなぁと改めて思いました.こういうレポートを中国政府がみて,抗議してきたりということはないんでしょうか.
いかちょー (2007-07-24 11:16) | コメント(0)| トラックバック(7)

Keyword: cygwin PostgreSQL Perl Catalyst Secure-SBM SSBM セキュア・ソーシャル・ブックマーク オープンソース
いかちょー (2007-07-23 10:40) | コメント(0)| トラックバック(20)
いかちょー (2007-07-20 09:23) | コメント(0)| トラックバック(3)
ここで,方針としては,タグの大きさの修飾はスタイルシートに任せて,とにかく 7 段階で表示することにします.使用されなくなったタグも残していますので,使用されている回数は最小 0 から最大値まであります.それを単純に 7 段階に分けることにします.つまり (最大値/7) の幅で class を分けます.
いかちょー (2007-07-19 10:16) | コメント(0)| トラックバック(4)
if( my $bdb = $c->model('SecureSBMDB::Bookmark')->find(
{
bookmark_id => $bookmarkid
}
)
){
my $bookmark = {
url => $bdb->bookmark_uri,
title => $bdb->bookmark_title
};
... my %user;
my @users;
my $usersnum = 0;
foreach my $ubdb ($bdb->user_bookmarks->search(
{
-or => \@ORquery,
-and => \@ANDquery,
},
{
join => [qw/
user_bookmark_roles
/],
order_by => 'user_bookmark_ts DESC',
}
)
){
my $userid = $ubdb->user_id;
my $profile = $ubdb->user->user_profiles->find({user_id => $userid});
my $nickname;
if( $profile->user_profile_nickname_publish == 1 ){
$nickname = '<ul class="noId"><li>'
. $profile->user_profile_nickname
. '</li></ul>';
}else{
$nickname = '<ul class="onlyId"><li>'
. $profile->user_id
. '</li></ul>';
}
my $comment = $ubdb->user_bookmark_comment;
...
} my @ORquery = ({'user_bookmark_roles.role_id' => 2});
if( $c->user_exists ){
my $udb = $c->stash->{user};
foreach my $ur ($udb->user_roles->all){
push( @ORquery, {'user_bookmark_roles.role_id' => $ur->role_id} );
}
}
if( defined $bookmark && $#users > 0 ){
$c->stash->{bookmark} = $bookmark;
$c->stash->{publishusers} = \@users;
$c->stash->{usersnum} = $#users;
}
Keyword: Perl Catalyst Secure-SBM SSBM セキュア・ソーシャル・ブックマーク
いかちょー (2007-07-18 10:01) | コメント(0)| トラックバック(0)
こうしてみてみると,一つ一つは当たり前のようなことばかりですが,これらを統合的にガバナンスを効かして,実行するというのはなかなか難しそうです.
参考文献には地方公共団体ガバナンス研究会の 『情報ガバナンス確立のための戦略手引き』をはじめとして,各地方自治体の取り組み事例などが含まれています.
民間企業でも参考になるガイドだと思いますので一読をお勧めします.同じ総務省から 「地方公共団体における情報セキュリティ監査に関するガイドライン」 も公開されていますので,あわせて読むとよいと思います.
いかちょー (2007-07-17 09:03) | コメント(0)| トラックバック(5)
いかちょー (2007-07-13 14:17) | コメント(0)| トラックバック(6)
他にもこまごまとした理由がありますが,こういう自発的なモチベーションがないと,なかなか書き続けるのは難しいでしょう.
Secure-SBM の開発日記では,稚拙ながらコードも載せていますが,少しでも Perl Catalyst をやっている人に参考になればと思って書いています.この場合にはすべてのひとに読んでもらうというよりは,検索サイトからでも見てもらえればいいなという気持ちが強いですね.もちろん,オープンソースで公開しているので,その解説という性質が強いですが.あとは,アイツはこんなことをやっているのか,と知ってもらえるためでしょうか...このコードはもっとこうするといいよ,というコメントがもらえたら最高です.
まぁ,とにかく,他人のブログを読みましょうよ,ってことです.読んで,何も感じないのか,大きくうなずいて自分の糧にするのか,はたまたコレは違うぞと自分の中で考えるきっかけにするのか,それはアナタの自由です.ついでにアクションを起こして思い切ってコメントしてみるというのもやってみましょう.コメントでのコミュニケーションも楽しいものですよ.
そしてマネジメントの皆さん.生産性を上げるためにあえて時間を許す,そういう文化を育てましょうよ.
いかちょー (2007-07-12 16:01) | コメント(0)| トラックバック(4)
CREATE TABLE user_tags (
user_tag_id SERIAL,
user_id INTEGER,
tag_id INTEGER,
PRIMARY KEY(user_tag_id),
FOREIGN KEY(user_id) REFERENCES users(user_id),
FOREIGN KEY(tag_id) REFERENCES tags(tag_id)
);sub updateFromVersion02 : Local {
my ( $self, $c ) = @_;
my $num = 0;
$c->stash->{pagetitle} = 'Secure-SBM Users-Tags Update';
$c->stash->{template} = 'admin/updatefromversion02.tt';
$c->model('SecureSBMDB::UserTag')->delete_all;
foreach my $udb ($c->model('SecureSBMDB::User')->all){
my $uid = $udb->user_id;
foreach my $ubdb ($udb->user_bookmarks->all){
foreach my $ubtdb ($ubdb->user_bookmark_tags->all){
my $tid = $ubtdb->tag_id;
if( $c->model('SecureSBMDB::UserTag')->find_or_create({
user_id => $uid,
tag_id => $tid
})
){
$num++;
}
}
}
}
$c->stash->{resultnum} = $num;
} # end of updateFromVersion02() $c->model('SecureSBMDB::UserTag')->
find_or_create(
{
user_id => $uid,
tag_id => $tid
}
);
Keyword: Perl Catalyst Secure-SBM SSBM セキュア・ソーシャル・ブックマーク
いかちょー (2007-07-11 11:40) | コメント(0)| トラックバック(0)
* A collection of name/value pairs. In various languages, this is realized as an object, record, struct, dictionary, hash table, keyed list, or associative array.
* An ordered list of values. In most languages, this is realized as an array, vector, list, or sequence.
(拙訳:
* name と value の組の集合.色々な(開発)言語では object, record, struct, dictionary, hash table, keyed list, associative array などで表される.
* 順序付けされた値 (value) のリスト.多くの言語では 配列,ベクトル, リスト,シーケンスなどで表される.
)
["fir", ["firefox", "first choice", "mozilla firefox"], [], []]
["tP", ["tPod", "tPodBMP", "tPodText"],[],[]]
となっていましたが,
["tP", ["tPod", "tPodBMP", "tPodText"]]
でもかまいません.
というわけで,Secure-SBM にも搭載予定ですが,Version 0.4 でのリリースになりそうです.
いかちょー (2007-07-10 17:14) | コメント(0)| トラックバック(2)
<?xml version="1.0" encoding="UTF-8" ?>
<OpenSearchDescription
xmlns="http://a9.com/-/spec/opensearch/1.1/"
xmlns:moz="http://www.mozilla.org/2006/browser/search/">
<ShortName>Secure-SBM</ShortName>
<Description>Secure-SBM(セキュア・ソーシャル・ブックマーク)検索</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image width="16" height="16">
data:image/x-icon;base64,AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAA
QAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBWiAAglsgAH5
aJQB%2FWyUAflsmAHVaMwCAXyoAeV42AINhLQCHYy0Ae2A6AIpoNQCJaTgAi
2s6AI1sOgCQbjsAim1AAI5uPgCRcD4AkXFBAIpvSQCOcUYAjXNKAJR1RgCXd
0gAjnVQAJh4SQCWeEsAj3ZSAJZ5TACTeVIAm3tNAJl7TgCUe1QAkHpYAJp9U
QCVfFUAm35SAJ1%2FUACcf1IAn4JVAJF%2BYwCchmIAq5VzAJGRkQCwmXkAs
pt2ALSdewComocAlpaWALWefAC3oX8AtaGCAKmejQC2ooIAq5%2BNALmjgQC
4o4IAuaSFALilhwC9qYoAs6eUAL6qjQC%2Fq40Av6uOAMCsjwCrq6sAuq%2B
eAK2trQCyr6gAv7KeAL%2BznwCvr68AsbCuALCwsAC1sqwAsrGwALKysgDFt
6IAt7SuALOzswC6ubUAybyrALm5uQDNvqkAurq6AMu%2FrADPwq4Avr6%2BA
MbDvQDUyLcAxcXFANbKuADHx8cAzsvFANnOvADaz74AzszKANHNygDR0dEA3
dXKANjVzwDh4eEA4uLiAOjk3gDp5d8A6ubgAOfn5wDp6OYA7erkAOnp6QDq6
uoA7evnAO3r6ADv7OcA6%2BvrAOzs7ADt7e0A8O7tAPHv7ADv7%2B8A8PDwA
PPx7gDz8e8A8fHxAPLy8gDz8%2FMA9vX0APX19QD29fUA9%2Fb0APb29gD39
%2FcA%2Bvj1APr59wD6%2BfgA%2Bfn5APr6%2BAD7%2B%2FsA%2FPz7AP38%
2BwD8%2FPwA%2Ff38AP39%2FQD%2B%2Fv4A%2F%2F%2F%2FAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkYh1bnl%2BgHyDioR4b4ORkZB
1UyxCRFBdY1tNVTFTfZGRXwEdGwE3IGVFNScMUW6QkZEXPnsBYkB2KTBaCoi
PkZGRMxMfJH9fMgZWVwFxkZGRkT8ZkAI%2BhgsEkS8NK5GRkZEYAxImbV8BT
pGGABqJkZGQg359c2dreX58b2d1ipGRjWxeT0lIWGFZS0xKXXONkWABAQEBP
UcBIwEBQ2Z0ipGLRo%2BDNAdwUoqBLQWNj5GRkYI6ISIUiHc2HhUckZGRkZE
8FhEzaZEuECU5cpGRkZGRQQyHkVxoOCqOkVR6kZGRkYwoDgEPZIU7CQEIapG
RkZGRkZGRkZGRkZGRkZGRkQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D
</Image>
<Url type="text/html"
template="http://localhost:3000/searchbookmark?searchword={searchTerms}"/>
<moz:SearchForm>http://localhost:3000/personal</moz:SearchForm>
</OpenSearchDescription>
<!--
This Program is distributed under version 1.0 of the Rinza Public
License Agreement, that is bundled with this package in the file
LICENSE, and is available through the website at the following URL:
http://www.tyzoh.jp/rinza/licenses/LICENSE-1.0.txt.
The Initial Developer of the Original Program is Nihon Unisys, Ltd.
The Original Program is copyrighted (C) 2007 by Nihon Unisys, Ltd.
with all rights reserved.
There is NO WARRANTY OF ANY KIND by the Initial Developer of the
Original Program.
-->
<?xml version="1.0" encoding="UTF-8" ?>
<OpenSearchDescription
xmlns="http://a9.com/-/spec/opensearch/1.1/"
xmlns:moz="http://www.mozilla.org/2006/browser/search/">
<ShortName>Secure-SBM</ShortName>
<Description>Secure-SBM(セキュア・ソーシャル・ブックマーク)検索</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image width="16" height="16">
data:image/x-icon;base64,AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAA
QAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBWiAAglsgAH5
aJQB%2FWyUAflsmAHVaMwCAXyoAeV42AINhLQCHYy0Ae2A6AIpoNQCJaTgAi
2s6AI1sOgCQbjsAim1AAI5uPgCRcD4AkXFBAIpvSQCOcUYAjXNKAJR1RgCXd
0gAjnVQAJh4SQCWeEsAj3ZSAJZ5TACTeVIAm3tNAJl7TgCUe1QAkHpYAJp9U
QCVfFUAm35SAJ1%2FUACcf1IAn4JVAJF%2BYwCchmIAq5VzAJGRkQCwmXkAs
pt2ALSdewComocAlpaWALWefAC3oX8AtaGCAKmejQC2ooIAq5%2BNALmjgQC
4o4IAuaSFALilhwC9qYoAs6eUAL6qjQC%2Fq40Av6uOAMCsjwCrq6sAuq%2B
eAK2trQCyr6gAv7KeAL%2BznwCvr68AsbCuALCwsAC1sqwAsrGwALKysgDFt
6IAt7SuALOzswC6ubUAybyrALm5uQDNvqkAurq6AMu%2FrADPwq4Avr6%2BA
MbDvQDUyLcAxcXFANbKuADHx8cAzsvFANnOvADaz74AzszKANHNygDR0dEA3
dXKANjVzwDh4eEA4uLiAOjk3gDp5d8A6ubgAOfn5wDp6OYA7erkAOnp6QDq6
uoA7evnAO3r6ADv7OcA6%2BvrAOzs7ADt7e0A8O7tAPHv7ADv7%2B8A8PDwA
PPx7gDz8e8A8fHxAPLy8gDz8%2FMA9vX0APX19QD29fUA9%2Fb0APb29gD39
%2FcA%2Bvj1APr59wD6%2BfgA%2Bfn5APr6%2BAD7%2B%2FsA%2FPz7AP38%
2BwD8%2FPwA%2Ff38AP39%2FQD%2B%2Fv4A%2F%2F%2F%2FAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkYh1bnl%2BgHyDioR4b4ORkZB
1UyxCRFBdY1tNVTFTfZGRXwEdGwE3IGVFNScMUW6QkZEXPnsBYkB2KTBaCoi
PkZGRMxMfJH9fMgZWVwFxkZGRkT8ZkAI%2BhgsEkS8NK5GRkZEYAxImbV8BT
pGGABqJkZGQg359c2dreX58b2d1ipGRjWxeT0lIWGFZS0xKXXONkWABAQEBP
UcBIwEBQ2Z0ipGLRo%2BDNAdwUoqBLQWNj5GRkYI6ISIUiHc2HhUckZGRkZE
8FhEzaZEuECU5cpGRkZGRQQyHkVxoOCqOkVR6kZGRkYwoDgEPZIU7CQEIapG
RkZGRkZGRkZGRkZGRkZGRkQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D
</Image>
<Url type="text/html"
template="http://localhost:3000/searchbookmark?q={searchTerms}"/>
<moz:SearchForm>http://localhost:3000/personal</moz:SearchForm>
</OpenSearchDescription>
<!--
This Program is distributed under version 1.0 of the Rinza Public
License Agreement, that is bundled with this package in the file
LICENSE, and is available through the website at the following URL:
http://www.tyzoh.jp/rinza/licenses/LICENSE-1.0.txt.
The Initial Developer of the Original Program is Nihon Unisys, Ltd.
The Original Program is copyrighted (C) 2007 by Nihon Unisys, Ltd.
with all rights reserved.
There is NO WARRANTY OF ANY KIND by the Initial Developer of the
Original Program.
-->
"http://localhost:3000" の部分を実際のサーバのアドレスとポート番号に変更して使用します.
いかちょー (2007-07-09 10:04) | コメント(0)| トラックバック(18)
unless( _checkRole( $c, $bookmark_id ) ){
return undef;
}sub _checkRole : Private {
my ( $c, $bookmark_id ) = @_;
my $udb = $c->stash->{user};
if( my $bdb = $c->model('SecureSBMDB::Bookmark')->
find( {bookmark_id => $bookmark_id} )
){
foreach my $brole ($bdb->roles->all){
foreach my $urole ($udb->roles->all){
if( $brole->role_id == $urole->role_id ){
return 1;
}
}
}
}
return 0;
}
Keyword: Perl Catalyst Secure-SBM SSBM セキュア・ソーシャル・ブックマーク
いかちょー (2007-07-06 23:28) | コメント(0)| トラックバック(3)
こんにちは,五十嵐です.
HTML で javascript と組み合わせて画像をボタンとして設置するための方法をまとめてみました.
ボタンの形状をそろえるために,スタイルシートを設定しておきます.
<style type="text/css">
<!--
.imgbutton1720 {
cursor: pointer;
}
.imgbutton1720_2 {
width: 32px;
height: 32px;
}
.imgbutton1720_3 {
border: 0px;
margin: 0px;
padding: 0px;
}
-->
</style><form method="POST" action="http://www.tyzoh.jp/modules/weblog/details.php?blog_id=1720">
<input type="image" src="http://www.tyzoh.jp/uploads/weblog_imagethumbs/273.png"
alt="submit"
title="実行"
class="imgbutton1720_2"
name="input1720_1"
id="input1720_1_2"
/>
</form>
<script type/javascript>
<!--
document.getElementById('input1720_1_2').onmouseover = function(){
this.src = "http://www.tyzoh.jp/uploads/weblog_imagephotos/276.jpg";
}
document.getElementById('input1720_1_2').onmouseout = function(){
this.src = "http://www.tyzoh.jp/uploads/weblog_imagephotos/273.png";
}
// -->
</script>form の中で使うと,javascript を使わずに submit と同じ動きができます.何か指定する場合には document.フォーム名.inputのname でアクセスできます.もちろん,id も使うことができます.画像の上にマウスを持っていった時に,自動的に pointer になってくれるのもメリットです.画像そのものを動的に変更したい場合には,getElementById を使う必要があります.
<input
type="image" src="http://www.tyzoh.jp/uploads/weblog_imagethumbs/273.png"
alt="submit"
title="実行"
name="img1720_2"
id="img1720_2_2"
class="imgbutton1720_2"
/>
<script>
<!--
document.getElementById('img1720_2_2').onclick = function(){
location.href="http://www.tyzoh.jp/modules/weblog/details.php?blog_id=1720";
}
document.getElementById('img1720_2_2').onmouseover = function(){
this.src = "http://www.tyzoh.jp/uploads/weblog_imagephotos/276.jpg";
}
document.getElementById('img1720_2_2').onmouseout = function(){
this.src = "http://www.tyzoh.jp/uploads/weblog_imagethumbs/273.png";
}
// -->
</script>form を使わない input では,動作を指定する必要があります.document.フォーム名.inputのname が使えないので,getElementById で id からオブジェクトを取り出してアクションを指定する必要があります.ポインタは自動的に pointer になります.
<img
src="http://www.tyzoh.jp/uploads/weblog_imagethumbs/273.png"
name="img1720_3"
alt="submit"
title="実行"
class="imgbutton1720 imgbutton1720_2"
/>
<script type/javascript>
<!--
document.img1720_3.onclick = function(){
location.href = "http://www.tyzoh.jp/modules/weblog/details.php?blog_id=1720";
}
document.img1720_3.onmouseover = function(){
this.src = "http://www.tyzoh.jp/uploads/weblog_imagephotos/276.jpg";
}
document.img1720_3.onmouseout = function(){
this.src = "http://www.tyzoh.jp/uploads/weblog_imagephotos/273.png";
}
// -->
</script>img タグの場合には明示的に動作を指定する必要があります.name フィールドを使って document.img タグの name でアクセスできます.ポインタの形状は明示的に指定する必要があります.
<img
src="http://www.tyzoh.jp/uploads/weblog_imagethumbs/273.png"
id="img1720_4"
alt="submit"
title="実行"
class="imgbutton1720 imgbutton1720_2"
/>
<script type/javascript>
<!--
document.getElementById('img1720_4').onclick = function(){
location.href = "http://www.tyzoh.jp/modules/weblog/details.php?blog_id=1720";
}
document.getElementById('img1720_4').onmouseover = function(){
this.src = "http://www.tyzoh.jp/uploads/weblog_imagephotos/276.jpg";
}
document.getElementById('img1720_4').onmouseout = function(){
this.src = "http://www.tyzoh.jp/uploads/weblog_imagephotos/273.png";
}
// -->
</script>4 番目の方法と img タグを使う点は同じですが,getElementById で id をつかって動作を指定しています.ポインタの形状は指定する必要があります.
<button
type="button"
id="img1720_5_1"
class="imgbutton1720 imgbutton1720_3"
alt="submit">
<img
src="http://www.tyzoh.jp/uploads/weblog_imagethumbs/273.png"
name="img1720_5_2"
alt="submit"
title="実行"
class="imgbutton1720 imgbutton1720_2 imgbutton1720_3"
id="img1720_5_3"
/>
</button>
<script type="text/javascript">
<!--
document.getElementById('img1720_5_1').onclick = function (){
location.href="http://www.tyzoh.jp/modules/weblog/details.php?blog_id=1720";
}
document.getElementById('img1720_5_3').onmouseover = function(){
this.src = "http://www.tyzoh.jp/uploads/weblog_imagephotos/276.jpg";
}
document.getElementById('img1720_5_3').onmouseout = function(){
this.src = "http://www.tyzoh.jp/uploads/weblog_imagephotos/273.png";
}
// -->
</script>button は汎用的ですが,ボタンの形状そのものを変更できません.スタイルシートで button の形状を画像に指定したりできるといいのですが...
getElementById で id にアクセスする必要があります.ポインタも明示的に変更しなければ pointer にはなってくれません.画像を動的に変更させる方法がわかりませんでした.
スタイルシートで画像を指定しておいて, class を切り替えると画像が変わるような仕組みができるといいんですが,スタイルシートで画像を指定する方法がわかりませんでした.innerHTML で img タグそのものを書き換えてやるとできるのでしょう.
<style type="text/css">
button {
img: http://foo.bar.jp/hoge.gif;
}
</style>とかやりたいんですけどねぇ...
【追記】watanabe さんから教えてもらいました.
スタイルシートで,background を使うのだそうです.ただし,IE で「BUG: WinXP: DHTML CSS background-image プロパティは BUTTON 要素に機能しません。」という問題があるようなので,background-image は使えません.
<style type="text/css">
<!--
button.engageimage1720 {
background: url('http://www.tyzoh.jp/uploads/weblog_imagephotos/276.jpg');
cursor: pointer;
}
button.editimage1720 {
background: url('http://www.tyzoh.jp/uploads/weblog_imagethumbs/273.png');
cursor: pointer;
}
-->
</style>
<button class="editimage1720 imgbutton1720_2" id="button1720_6"></button>
<script type="text/javascript">
<!--
document.getElementById('button1720_6').onclick = function(){
location.href="http://www.tyzoh.jp/modules/weblog/details.php?blog_id=1720";
}
document.getElementById('button1720_6').onmouseover = function(){
this.className = "engageimage1720 imgbutton1720_2";
}
document.getElementById('button1720_6').onmouseout = function(){
this.className = "editimage1720 imgbutton1720_2";
}
// -->
</script>
バックグラウンドの画像の大きさを変えられないのが難点です.
いかちょー (2007-07-05 10:48) | コメント(0)| トラックバック(5)
ハリーポッターに便乗するスパムやワームもあるようです.自分は引っかからないぞ,とか思っていても,子供たちはその気になって感染が広がる可能性もありますね.根本的なスパム対策ってないものでしょうか.
いかちょー (2007-07-04 15:29) | コメント(0)| トラックバック(0)
[%- FOREACH tag_v IN bookmark_v.tags -%]
[%- SET tagelement = 'tag_' _ bookmark_v.id _ tag_v | html | collapse -%]
<span id="[% tagelement %]" class="eachtag">
[%- tag_v | html %]</span>,
[%- END -%][% FOREACH tag_v IN bookmark_v.tags %]
[%- SET tagelement = 'tag_' _ bookmark_v.id _ tag_v | html | collapse -%]
var var_[% tagelement %]
= _getElementById('[% tagelement %]');
var_[% tagelement %].onmouseover
= function () {
this.style.color='#ffffff';
this.style.background='#999999';
this.style.cursor='pointer';
}
var_[% tagelement %].onmouseout
= function () {
this.style.color='#000000';
this.style.background='#ffffff';
this.style.cursor='auto';
}
var_[% tagelement %].onclick
= function () {
location.href
= '/searchbookmark?tag='
+ encodeURI('[% tag_v | html %]');
}
[% END %]sub searchbookmark : Path('/searchbookmark') {
my ( $self, $c ) = @_;
...(省略)
# Bookmark の検索
$tid = $c->model('SecureSBMDB::Tag')->
find( {tag_name => $data{tag}} )->tag_id;
foreach my $ub ($udb->user_bookmarks->all){
foreach my $t ($ub->user_bookmark_tags->all){
if( $t->tag_id == $tid ){
my $tmpbe = _makeOneBookmarkEntry( $c, $ub->bookmark_id );
if( $tmpbe ){
unshift( @bookmarks, $tmpbe );
}
}
}
}
$c->stash->{pagetitle} = 'Secure-SBM Search Bookmark Result';
$c->stash->{template} = 'personal/personal.tt';
$c->stash->{mybookmarks} = \@bookmarks;
}Keyword: Perl Catalyst Secure-SBM SSBM セキュア・ソーシャル・ブックマーク
いかちょー (2007-07-03 10:29) | コメント(0)| トラックバック(11)
sub deletebookmark : Path('/deletebookmark') {
my ( $self, $c ) = @_;
my $bookmarkid = $c->req->param('bookmark_id');
my $uid = $c->stash->{user}->user_id;
my $title;
if( my $ubdb = $c->model('SecureSBMDB::UserBookmark')->
find( {user_id => $uid, bookmark_id => $bookmarkid} )
){
$title = $ubdb->bookmark->bookmark_title;
$ubdb->user_bookmark_tags->delete_all;
$ubdb->delete;
}
$c->flash->{resultmessage} = '「' . $title . '」を削除しました.';
$c->res->redirect('/personal');
}<div id="resultmessage">
[% resultmessage || c.flash.resultmessage -%]
</div> <!-- end of resultmessage --><button type="button" id="deletebookmark_button[% bookmark_v.id %]">
削除
</button><div id="bookmark_info[% bookmark_v.id %]">
タグ: [%- FOREACH tag_v IN bookmark_v.tags -%][% tag_v | html %],[% END -%]
<br />
コメント: [% bookmark_v.comment | html %]<br />
タイムスタンプ: [% bookmark_v.timestamp %]
</div> <!-- end of bookmark_info[% bookmark_v.id %] -->いかちょー (2007-07-02 20:10) | コメント(0)| トラックバック(5)
月別アーカイブ
Copyright (C) 2004-2010 Nihon Unisys, Ltd. All Rights Reserved.
Powered by Movable Type Open Source