2008年3月アーカイブ

僕のクルマは、イギリスのメーカーだったんですけれどもいつの間にか中国の自動車メーカーに売られてしまい、メンテナンスベンダーも松本に逃げていっちゃってシオシオだったりしまして、かれこれ10年ぐらい乗っているのですけれども、今日、今まで気づかなかった機能に気づいてしまいました。

キーレスエントリーであけると、ロックの脇にあるLEDが光る!

いままでそこの円形のくぼみがLEDであることすら気づいていませんでした。だって、光り方が光るというにはあまりにも控えめな光り方だったので。LR44でつけているのじゃろか。

とはいえ、このクルマもいつまで持つのか不安になってきているのも事実。同僚は、暫定税率切れるのでクルマの取得税安くなるでーとか言うけれども……

出力の手引きWeb はてなブックマーク対応:大日本スクリーン製造株式会社 メディアアンドプレシジョンテクノロジーカンパニー [www.screen.co.jp]

出力の手引きWebでは、ソーシャルブックマークサービスとして最も普及しているものの一つである「はてなブックマーク」に対応しました。

なんと!

むかしうちのblogで提供していたUser JavaScriptは、もう使用しなくていいので、外してください。
http://blog.dtpwiki.jp/dtp/2008/02/trueflowwebuser_98d4.html

EDGE Now! のブロガーリスト、アイコンを選択しないと詳細がわかない仕組みなので、せっかくXMLがでていますので表組で表示します。

設置例:EDGE Now! Bloggers List

Filename: bloggerslist.cgi

#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use Data::Dumper;
use HTML::Template;
use LWP::Simple;
use URI;
use utf8;
use XML::Simple;
binmode STDOUT => ':utf8';
 
my $tmpl_html = <<'END_OF_HTML';
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC 
  "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
  <head>
    <meta http-equiv="Content-Type"
      content="text/html; charset=UTF-8" />
    <title>EDGE Now! Bloggers List</title>
    <meta http-equiv="content-script-type"
      content="text/javascript" />
    <meta http-equiv="content-style-type"
      content="text/css" />
    
    <link rel="index" href="./" />
    <link rev="made" href="mailto:aab61120@pop12.odn.ne.jp" />
    <link rel="shortcut icon" href="favicon.ico" />
    <link rel="stylesheet" href="default.css" type="text/css" />
    <style type="text/css">
      body {
        text-align: center;
      }
      img {
        border: 0px;
      }
      div#contents {
        width: 700px;
        margin: 0px auto;
        text-align: left;
      }
      table.userlist {
        width: 100%;
        border-collapse: collapse;
      }
      .userlist thead th {
        background-color: #333;
        color: white;
        text-align: center;
      }
      .userlist tbody th {
        background-color: white;
        text-align: center;
      }
      .userlist tbody th {
        background-color: #f8f8f8;
      }
      .userlist tbody .even th {
        background-color: #e0e0e0;
      }
      .userlist tbody .even td {
        background-color: #e8e8e8;
      }
      .posted em {
        background-color: #fff0f0;
        font-weight: bold;
        font-style: normal;
      }
      .posted em a,
      .posted em a:link,
      .posted em a:visited,
      .posted em a:hover,
      .posted em a:active {
        color: #f66; 
        font-weight: bold;
        font-style: normal;
      }
      .posted strong {
        background-color: #fcc;
        font-weight: bold;
        font-style: normal;
        display: inline;
      }
      .posted strong a,
      .posted strong a:link,
      .posted strong a:visited,
      .posted strong a:hover,
      .posted strong a:active {
        color: red;
        font-weight: bold;
        font-style: normal;
        text-decoration: none;
      }
      .posted a,
      .posted a:link,
      .posted a:visited,
      .posted a:hover,
      .posted a:active {
        text-decoration: none;
        color: blue;
      }
    </style>
  </head>
  
  <body>
    <div id="contents">
      <h1>EDGE Now! Bloggers List</h1>
      <p>
        Adobe EDGE Now!のブロガーランキングで表示される
        Bbloggers Listの一覧表示です。
      </p>
      <p>
        <a href="http://edgenow.jp/" target="_blank">EDGE Now!</a>
      </p>
      <p>
        現在の最大id:
        <tmpl_var name="maxid" escape="html">人<br />
        ユーザリストの人数:
        <tmpl_var name="maxcontents" escape="html">人<br />
        退会した人の人数:
        <tmpl_var name="diff" escape="html">人<br />
      </p>
      <p>
        page:
        <tmpl_var name="page" escape="html">
        pager: 
        <tmpl_loop name="loop_pager">
        <tmpl_if name="isnowpage">
          <tmpl_var name="page" escape="html">
        <tmpl_else>
        <a href="bloggerslist.cgi?page=<tmpl_var
          name="page" escape="html">">
          <tmpl_var name="page" escape="html"></a>
        </tmpl_if>
        </tmpl_loop>
      </p>
      <table border="0" cellpadding="0" cellspacing="0"
        summary="EDGE Now! Bloggers List"
        class="userlist">
        <thead>
          <tr>
            <th abbr="id">
              id
            </th>
            <th abbr="blog">
              blog
            </th>
            <th abbr="name" style="width:90px;">
              name
            </th>
            <th abbr="SBMs" style="width:80px;">
              SBMs
            </th>
          </tr>
        </thead>
        <tbody>
          <tmpl_loop name="loop_masks">
          <tr<tmpl_unless
               name="__odd__"> class="even"</tmpl_unless>>
            <th abbr="id">
              <tmpl_var name="id" escape="html">
            </th>
            <td>
              <span style="font-weight: bold;">
                <tmpl_var name="title" escape="html">
              </span>
              <br />
              <a href="<tmpl_var name="url" escape="html">"
                target="_blank">
                <tmpl_var name="url"   escape="html"></a>
            </td>
            <td style="text-align: center;">
              <a href="<tmpl_var name="url" escape="html">"
                style="text-decoration: none;"
                target="_blank">
                <img src="http://edgenow.jp/member/pic/<tmpl_var
                  name="id" escape="html">.gif"
                  alt="<tmpl_var name="name" escape="html">"
                  width="50" height="50" /><br />
                <tmpl_var name="name" escape="html"></a>
            </td>
            <td class="posted">
              <script type="text/javascript" charset="UTF-8"
                src="http://labo.dtpwiki.jp/sbm/check.cgi?url=<tmpl_var
                name="url" escape="html">&amp;mode=js"></script>
            </td>
          </tr>
          </tmpl_loop>
        </tbody>
      </table>
    </div>
  </body>
</html>
END_OF_HTML
 
 
my $itemsparpage = 40;
my $q = CGI->new();
my $page = $q->param('page') || 0;
my $ref  = get_EDGENow(0);
my $maxid       = $ref->{bloggerListList}->[0]->{blogger}->[0]->{id};
   $ref  = get_EDGENow($page);
my $maxcontents = $ref->{module}->{maxcontents}->{count};
my $maxpage     = int ($maxcontents / $itemsparpage);
my $pagelist;
for ( 0 .. $maxpage ) {
  push @$pagelist, { page      => $_,
                     isnowpage => $_ == $page,
 };
} 
 
my $showlist;
foreach my $item ( @{$ref->{bloggerListList}->[0]->{blogger} } ) {
  my $temp_item = { 
                 id    =>$item->{id},
                 url   =>$item->{url}->[0],
                 title =>$item->{title}->[0],
                 name => $item->{name}->[0],
  };
  push @$showlist, $temp_item;
}
my $tmpl = HTML::Template->new( scalarref => \$tmpl_html,
                                die_on_bad_params => 0,
                                loop_context_vars => 1, );
$tmpl->param( 'loop_masks' => $showlist,
              'loop_pager' => $pagelist,
              'maxid'       => $maxid,
              'maxcontents' => $maxcontents,
              'diff'        => $maxid - $maxcontents,
              'page'        => $page,
            );
print $q->header( -type => 'text/html', -charset => 'UTF-8',);
print $tmpl->output();
exit;
 
sub get_EDGENow {
  my $page = shift;
  my $proxy = 'http://edgenow.jp/xml/bloggerList.php';
  my $uri = URI->new( $proxy );
  $uri->query_form(
    page => $page,
  ) if $page;
  my $xml = get( $uri->as_string );
  my $xs = new XML::Simple();
  my $ref = $xs->XMLin( $xml, forcearray => 1 );
  return $ref;
}
 
 
__END__

Edge Now!は、サーバからXMLを取得していろいろランキングとか出しているんですけれども、せっかくなんで、SBMのブックマーク件数とのマッシュアップ(笑)をしてみました。

EDGE Now!の覆面の中の人暴露

Edgenownakas
▲マスクRANKとSBMブックマーク件数のコラボレーション

いつものごとくソースおいときますね。

Filename: bloggersranking.cgi

#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use HTML::Template;
use LWP::Simple;
use utf8;
use XML::Simple;
binmode STDOUT => ':utf8';
 
my $xml_url = 'http://edgenow.jp/xml/bloggerThis.php';
my $masklist = 
[
  {
    image   => '00832mask.png',
    rank    => 'AAA',
    order   => 1,
    message => '組織の最上部で皆の安全を見守るのがトップである'
              .'自分の仕事なのに今じゃAAが自分の下で組織をを'
              .'見守っているじゃないか',
  },
  {
    image   => '01635mask.png',
    rank    => 'AA',
    order   => 2,
    message => 'このかぶりモンやとさすがに戦えへんわ',
  },
  {
    image   => '02765mask.png',
    rank    => 'A',
    order   => 3,
    message => 'まわりが触れないぐらいの穴なら問題なく通れます',
  },
  {
    image   => '03657mask.png',
    rank    => 'B',
    order   => 4,
    message => 'つので大豆がつまめます 大豆以外もつまめます',
  },
  {
    image   => '04961mask.png',
    rank    => 'C',
    order   => 5,
    message => '俺戦隊系というよりライダー系だよね',
  },
  {
    image   => '05038mask.png',
    rank    => 'D',
    order   => 6,
    message => 'サイバトロンちゃうわ',
  },
  {
    image   => '06092mask.png',
    rank    => 'E',
    order   => 7,
    message => 'カタヌキでオレがでたら諦めてくれ',
  },
  {
    image   => '07811mask.png',
    rank    => 'F',
    order   => 8,
    message => 'このマスクつけていると戦わずに済むわい',
  },
  {
    image   => '08036mask.png',
    rank    => 'G',
    order   => 9,
    message => 'サ○エでございます',
  },
  {
    image   => '09173mask.png',
    rank    => 'H',
    order   => 10,
    message => 'クチまるみえなんだけど?ライダーマンいやだわー',
  },
  {
    image   => '10346mask.png',
    rank    => 'I',
    order   => 11,
    message => 'リーダーやねんけどうちの組織上いっぱいおるんよ',
  },
  {
    image   => '11803mask.png',
    rank    => 'J',
    order   => 12,
    message => '青は4人居るねんて',
  },
  {
    image   => '11803mask.png',
    rank    => 'J',
    order   => 13,
    message => 'しゃーないなー',
  },
  {
    image   => '11803mask.png',
    rank    => 'J',
    order   => 14,
    message => 'ほな麻雀でも',
  },
  {
    image   => '11803mask.png',
    rank    => 'J',
    order   => 15,
    message => 'あかん金無いわ',
  },
  {
    image   => '12384mask.png',
    rank    => 'K',
    order   => 16,
    message => 'まりもっこりいうなー',
  },
  {
    image   => '13124mask.png',
    rank    => 'L',
    order   => 17,
    message => 'またアクタースーツの胸のあたりがきつくなってきたー',
  },
  {
    image   => '14567mask.png',
    rank    => 'M',
    order   => 18,
    message => '粉のままでいいからくれ!はーやーくー',
  },
  {
    image   => '15944mask.png',
    rank    => 'N',
    order   => 19,
  },
  {
    image   => '16534mask.png',
    rank    => 'O',
    order   => 101,
  },
  {
    image   => '17081mask.png',
    rank    => 'P',
    order   => 151,
  },
  {
    image   => '18616mask.png',
    rank    => 'Q',
    order   => 201,
  },
  {
    image   => '19018mask.png',
    rank    => 'R',
    order   => 251,
    message => 'このまえ戦闘員と間違われて死にかけたw',
  },
];
 
 
my $tmpl_html = <<'END_OF_HTML';
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC 
  "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
  <head>
    <meta http-equiv="Content-Type"
      content="text/html; charset=UTF-8" />
    <title>EDGE Now!の覆面の中の人暴露</title>
    <meta http-equiv="content-script-type"
      content="text/javascript" />
    <meta http-equiv="content-style-type"
      content="text/css" />
    
    <link rel="index" href="./" />
    <link rev="made" href="mailto:aab61120@pop12.odn.ne.jp" />
    <link rel="shortcut icon" href="favicon.ico" />
    <link rel="alternate" type="application/rss+xml" title="RSS"
      href="http://labo.dtpwiki.jp/edgenow/index.rdf" />
    <link rel="stylesheet" href="default.css" type="text/css" />
    <style>
      body {
        text-align: center;
      }
      div#contents {
        width: 700px;
        margin: 0px auto;
        text-align: left;
      }
      table {
        border-collapse: collapse;
      }
      thead th {
        background-color: #333;
        color: white;
      }
      tbody th {
        background-color: white;
      }
      tbody .even th,
      tbody .even td {
        background-color: #d0d0d0;
      }
      .posted em {
        background-color: #fff0f0;
        font-weight: bold;
        font-style: normal;
      }
      .posted em a,
      .posted em a:link,
      .posted em a:visited,
      .posted em a:hover,
      .posted em a:active {
        color: #f66; 
        font-weight: bold;
        font-style: normal;
      }
      .posted strong {
        background-color: #fcc;
        font-weight: bold;
        font-style: normal;
        display: inline;
      }
      .posted strong a,
      .posted strong a:link,
      .posted strong a:visited,
      .posted strong a:hover,
      .posted strong a:active {
        color: red;
        font-weight: bold;
        font-style: normal;
        text-decoration: none;
      }
      .posted a,
      .posted a:link,
      .posted a:visited,
      .posted a:hover,
      .posted a:active {
        text-decoration: none;
        color: blue;
      }
    </style>
    </script>
  </head>
  
  <body>
    <div id="contents">
    <h1>EDGE Now!の覆面の中の人暴露</h1>
    <p>
      Adobe EDGE Now!のブロガーランキングで表示される
      覆面の中の人のサイトの実際の人気を暴きます。
    </p>
    <p>
      <a href="http://edgenow.jp/" target="_blank">EDGE Now!</a>
    </p>
    <table border="0" cellpadding="0" cellspacing="0">
      <thead>
        <tr>
          <th>
            RANK
          </th>
          <th>
            MASK
          </th>
          <th style="width: 300px;">
            Message
          </th>
          <th style="width: 90px;">
            中の人の名前
          </th>
          <th style="width: 80px;">
            実際の人気
          </th>
        </tr>
      </thead>
      <tbody>
        <tmpl_loop name="loop_masks">
        <tr<tmpl_unless name="__odd__"> class="even"</tmpl_unless>>
          <th>
            <tmpl_var name="rank" escape="html">
          </th>
          <td>
            <img src="images/<tmpl_var name="image" escape="url">">
          </td>
          <td>
            <tmpl_var name="message" escape="html">
          </td>
          <td style="text-align: center;">
            <a href="<tmpl_var name="url">" target="_blank">
              <img src="http://edgenow.jp/member/pic/<tmpl_var name="id">.gif"
                width="50" height="50" border="0" /><br />
              <tmpl_var name="name" escape="html"></a>
          </td>
          <td class="posted">
            <script type="text/javascript" charset="UTF-8"
              src="http://labo.dtpwiki.jp/sbm/check.cgi?url=<tmpl_var
              name="url">&mode=js"></script>
          </td>
        </tr>
        </tmpl_loop>
      </tbody>
    <table>
    </div>
  </body>
</html>
END_OF_HTML
 
my $xs  = XML::Simple->new();
my $ref = $xs->XMLin( get( $xml_url ), forcearray => 1 );
 
my $showlist;
foreach my $item ( @{$ref->{bloggerListThis}->[0]->{blogger} } ) {
  my $temp_item = shift @$masklist;
  $temp_item = { %$temp_item,
                 id    => $item->{id   },
                 url   => $item->{url  }->[0],
                 title => $item->{title}->[0],
                 name  => $item->{name }->[0],
  };
  push @$showlist, $temp_item;
}
 
my $tmpl = HTML::Template->new(
             scalarref         => \$tmpl_html,
             die_on_bad_params => 0,
             loop_context_vars => 1,
           );
$tmpl->param( 'loop_masks' => $showlist, );
 
my $q = CGI->new();
print $q->header( -type => 'text/html', -charset => 'UTF-8',);
print $tmpl->output();
 
exit;
 
__END__

今回のポイントは、XML::Simpleのforcearray => 1です。吐き出されるXMLのリスト、ランク順に出てきて、つまり順序に依存しているんです。だから、forcearray => 1がついていないハッシュのままだと、ランク順に取得できないのでした。

XMLで出現順序に依存(XML用語でなんていうか知らんが)ていうの結構多いので注意しよう。

EDGE Now! [edgenow.jp] に登録するとき、ニックネームを入力する欄があり、登録時に入れたニックネームがサービス内で使われるわけですが、プロフィール変更をすると、ニックネームがローマ字の小文字(lower case)になる。

つまり、CLで登録したのに、プロフィール写真を登録しようと思って変更すると、clになってしまう。

日本には大文字を勝手に小文字にする文化ないよ。日本人が作っているんだろうから、しっかりして欲しいなー

AdobeのEDGE Now!という皆の力でブックマークを集めようとしているサイトでは、サイト内でブロガーランキングをやっていまして、いいブックマークをたくさん集めてきたなど貢献度によってAAA~Rまでランクがつくみたいです。

さらに、ブログパーツまで用意されています。


▲モチーフは戦隊もの

それで、どんなアイコンがでるのかと思い、調べてみました。

Edgenowiconss
▲縁日状態。プリキュアねえの?

戦隊通り越して雨宮慶太に近づこうとしているかどうか知りませんがものすごい意匠の戦隊がおるんですけれども。

この戦隊のバックグランドが知りたいですね。

アドビシステムズが始めたEDGE Now! [edgenow.jp] というサイトでは、登録しているブロガーが書いた、各自のブログのエントリに書いてあるURLを集めてきて、リスト表示しているのですが、

Edgenow_latestsite
▲LATEST SITE

僕の英語力は、先週土曜日に6年ぶりに会うことになった東京の友人が実は包茎クリニックに勤めていると知って衝撃を受けつつもともかく待ち合わせ場所に向かったら友人と共に黒人の人が一緒に来ていて緊張しながらへローて言ったら実は彼がコートジボワール系でフランス語でダメじゃん、ていう程度なのですが、LATESTってでかでかと書いていれば最近採集したエントリだと勘違いするわけです。

おかげで、早とちりして、

EDGE Now!の新着サイト表示でtrick7.com blogがえこひいきされている - CLの日記

なんてエントリを書いてしまいました。アー恥ずかし。

結論として、ここは、moreの箇所をクリックするとわかりますが、複数の人がblogのエントリ書いた事を示しているのです。はてブ風に言うとホッテントリ、つまり注目のエントリー、ということなのでした。

そうなると、RSS生成するときに、元のXMLを単純に取得しただけだったら、ホットエントリー注目エントリーのRSS、ていうことになるかな。直しとこう。


(2008-3-26 18.13訂正)

<del>ホッテントリ、つまり</del>

済みません、はてブの方も勘違いしていました……

先日作った「様々なオンラインブックマークサービスのブックマーク件数を画像ではなくて数値で取得」が無駄にパワーアップしました。

  • 無駄にLast-modifiedとか吐くようになり、ブラウザから無駄に問い合わせこないようにしました。
  • 無駄にブラウザからのヘッダのIf-Modified-Sinceと比較して304を吐くようになり、無駄に転送しないようになりました。
  • 無駄にmod_perl環境でも動きます(Apache2のModPerl::Registryで動いています)。
  • 無駄にJSONまたはJSONPを吐くようになりました。ブログパーツ用。
  • 無駄にJavaScriptのdocument.writeを吐けるようになりました。ブログパーツ用。

負荷が気になる場合は、自分の手持ちのサーバに実装してください。そもそも、SBM問い合わせ部が非同期処理になっていませんのでSBM側のデータ吐き出しが詰まればレスポンスも詰まる仕組みですし……

Filename: check.cgi

#!/usr/bin/perl
use strict;
use warnings;
use Cache::File;
use CGI;
use Digest::MD5;
use HTML::Template;
use JSON::Syck;
use LWP::Simple;
use LWP::UserAgent;
use HTTP::Date;
use utf8;
use Data::Dumper;
use XMLRPC::Lite;
binmode STDOUT => ':utf8';
 
sbm();
 
sub sbm {
  # 初期設定
  our $cachedir = 'cache';
  our $sbms = { 
       hatena =>
       {
         proxy   => 'http://b.hatena.ne.jp/xmlrpc',
         entry   => 'http://b.hatena.ne.jp/entry/',
         method  => 'bookmark.getCount',
         message => 'このエントリーをはてなブックマークで'
                   .'ブックマークしているユーザ数',
       },
       livedoor =>
       {
         proxy   => 'http://rpc.clip.livedoor.com/count',
         entry   => 'http://clip.livedoor.com/page/',
         method  => 'clip.getCount',
         message => 'このエントリーを'
                   .'livedoor Clipでクリップしているユーザ数',
       },
       pingking =>
       {
         proxy   => 'http://api.pingking.jp/xmlrpc/bookmark',
         entry   => 'http://pingking.jp/url/',
         method  => 'getCount',
         message => 'このエントリーを'
                   .'PingKingでブックマークしているユーザ数',
       },
       yahoo =>
       {
         proxy   => 'http://num.bookmarks.yahoo.co.jp/yjnostb.php?urls=',
         regexp  => 'ct="(\d+)"',
         entry   => 'http://bookmarks.yahoo.co.jp/url?url=',
         message => 'このエントリーを'
                   .'Yahooブックマークしているユーザ数',
       },
       delicious =>
       {
         proxy   => 'http://badges.del.icio.us/feeds/json/url/data?url=',
         entry   => 'http://del.icio.us/url/',
         message => 'このエントリーを'
                   .'del.icio.usでブックマークしているユーザ数',
       },
       buzzurl =>
       {
         proxy   => 'http://api.buzzurl.jp/api/counter/v1/json?url=',
         entry   => 'http://buzzurl.jp/entry/',
         message => 'このエントリーを'
                   .'Buzzurlでブックマークしているユーザ数',
       },
       fc2 =>
       {
         proxy   => 'http://bookmark.fc2.com/image/users/',
         regexp  => '/(\d+)\.png',
         entry   => 'http://bookmark.fc2.com/search/detail?url=',
         message => 'このエントリーを'
                   .'FC2ブックマークしているユーザ数',
       },
       pookmark =>
       {
         proxy   => 'http://pookmark.jp/count/',
         regexp  => '/(\d+)$',
         entry   => 'http://pookmark.jp/url/',
         message => 'このエントリーを'
                   .'POOKMARKでブックマークしているユーザ数',
       },
       total =>
       {
         entry   => 'http://labo.dtpwiki.jp/sbm/check.cgi?url=',
         message => 'このエントリーをブックマークしている'
                   .'総ユーザ数',
       }
     };
  
  
  # 開始
  my $q      = CGI->new();
  my $url    = $q->param('url') || 'http://www.yahoo.co.jp/';
  
  # キャッシュ
  my $data   = check_cache( $url );
  my $counts = $data->{counts};
  my $expiry = $data->{expiry};
  my $ctime  = $data->{ctime};
  
  # ブラウザキャッシュと比較
  if ( $q->http('If-Modified-Since') eq time2str($ctime) ) {
    print $q->header(
       -status         => '304 Not Modified',
       'Cache-Control' => "max-age=$expiry",
    );
  }
  elsif ( $q->param('mode') ) {
    if ( $q->param('mode') =~ m|json|i ) {  # JSON出力モード
      show_json( $q, $url, $counts, $expiry, $ctime );
    }
    elsif ( $q->param('mode') =~ m|js|i ) { # js出力モード
      show_js( $q, $url, $counts, $expiry, $ctime );
    }
  }
  else { # モード指定なし:HTML出力モード
    show_html( $q, $url, $counts, $expiry, $ctime );
  }
  exit; # オワタ
  
  
  # JS出力モード
  sub show_js {
    my $q      = shift;
    my $url    = shift;
    my $counts = shift;
    my $expiry = shift;
    my $ctime  = shift;
    print $q->header(
      -type    => 'text/javascript',
      -charset => 'UTF-8',
      -expires => "+${expiry}",
      "Last-modified" => time2str($ctime),
    );
    my $tmpl_html = <<"    END_OF_JS";
      document.write( ''
        + '<img src="http://labo.dtpwiki.jp/'
        + 'sbm/images/total.gif"'
        + ' width="16" height="16" border="0"'
        + ' style="vertical-align: middle;" />'
        + '<tmpl_var name="users">'
      );
    END_OF_JS
    my $tmpl = HTML::Template->new( scalarref => \$tmpl_html );
    (my $users = sbm_html('total', $url, $counts->{total} ) )
      =~ s|[\x0a\x0d]||g;
    $users =~ s|\s\s+| |g;
    $tmpl->param( users => $users );
    print $tmpl->output();
    return;
  }
  
  # JSON出力モード
  sub show_json {
    my $q      = shift;
    my $url    = shift;
    my $counts = shift;
    my $expiry = shift;
    my $ctime  = shift;
    my $json   = $q->param( 'callback' ) =~ m/^[a-zA-Z0-9\.\_\[\]]+$/
                   ? $q->param( 'callback' )
                     . '(' . JSON::Syck::Dump( $counts ) . ');'
                   : JSON::Syck::Dump( $counts );
    print $q->header(
      -type           => 'text/javascript',
      -expires        => "+${expiry}",
      "Last-modified" => time2str($ctime),
    );
    print $json;
  }
  
  # HTML出力モード
  sub show_html {
    my $q      = shift;
    my $url    = shift;
    my $counts = shift;
    my $expiry = shift;
    my $ctime  = shift;
    my $html_hash = { # テンプレート差し込み用HTML項目準備
      yahoo     => sbm_html( 'yahoo'    , $url, $counts->{yahoo    } ),
      hatena    => sbm_html( 'hatena'   , $url, $counts->{hatena   } ),
      delicious => sbm_html( 'delicious', $url, $counts->{delicious} ),
      fc2       => sbm_html( 'fc2'      , $url, $counts->{fc2      } ),
      livedoor  => sbm_html( 'livedoor' , $url, $counts->{livedoor } ),
      pookmark  => sbm_html( 'pookmark' , $url, $counts->{pookmark } ),
      buzzurl   => sbm_html( 'buzzurl'  , $url, $counts->{buzzurl  } ),
      pingking  => sbm_html( 'pingking' , $url, $counts->{pingking } ),
      total     => sbm_html( 'total'    , $url, $counts->{total    } ),
      url       => $url,
    };
    my $tmpl_html = << '    END_OF_HTML';
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC 
  "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xml:lang="ja" lang="ja">
  <head>
    <meta http-equiv="Content-Type"
      content="text/html; charset=UTF-8" />
    <title>
      各SBMサービス別オンラインブックマーク件数チェック
    </title>
    <meta http-equiv="content-style-type"
      content="text/css" />
    <link rev="made" href="mailto:aab61120@pop12.odn.ne.jp" />
    <link rel="index" href="." />
    <style type="text/css">
      body {
        font-size: 13px;
        *font-size: small;
        *font: x-small;
      }
      * {
        margin: 0; 
        padding: 0;
        line-height: 1.6;
        color: #333;
      }
      body {
        background-color: #fff;
        font-family: 'メイリオ',Meiryo,
                     'MS Pゴシック',sans-serif;
      }
      input {
        font-family: Osaka, 'メイリオ',Meiryo,
                     'MS Pゴシック',sans-serif;
      }
      h1 {
        font-weight: bold;
        font-size: 122%;
        margin-bottom: 20px;
      }
      img {
        border: 0;
        vertical-align: middle;
      }
      .posted em {
        background-color: #fff0f0;
        font-weight: bold;
        font-style: normal;
      }
      .posted em a,
      .posted em a:link,
      .posted em a:visited,
      .posted em a:hover,
      .posted em a:active {
        color: #f66; 
        font-weight: bold;
        font-style: normal;
      }
      .posted strong {
        background-color: #fcc;
        font-weight: bold;
        font-style: normal;
        display: inline;
      }
      .posted strong a,
      .posted strong a:link,
      .posted strong a:visited,
      .posted strong a:hover,
      .posted strong a:active {
        color: red;
        font-weight: bold;
        font-style: normal;
        text-decoration: none;
      }
      .posted a,
      .posted a:link,
      .posted a:visited,
      .posted a:hover,
      .posted a:active {
        text-decoration: none;
        color: blue;
      }
      #content {
        margin: 20px;
      }
      div.posted {
        margin  : 20px;
        font-size: 90%;
        line-height: 19px;
      }
      dt {
        font-weight: bold;
      }
      dd {
        padding-left: 16px;
      }
    </style>
  </head>
  <body>
    <div id="content">
      <h1>
        <a href="./">
          オンラインブックマーク件数チェック</a
        >
      </h1>
      <form action="check.cgi" method="get">
        <p>
          <label for="url">アドレス:</label>
          <input name="url" id="url" style="width: 60%;"
            tabindex="1" accesskey="a"
            value="<tmpl_var name="url" escape="html">" />
          <input type="submit"
            tabindex="2" accesskey="s"
            value="一斉問い合わせ開始"
          />
        </p>
        <div class="posted">
          <img src="images/yahoo.gif"
            alt="yahoo"
            width="16" height="16"
          /><tmpl_var name="yahoo">
          <br />
          <img src="images/hatena.gif"
            alt="hatena"
            width="16" height="16"
          /><tmpl_var name="hatena">
          <br />
          <img src="images/delicious.gif"
            alt="delicious"
            width="16" height="16"
          /><tmpl_var name="delicious">
          <br />
          <img src="images/fc2.gif"
            alt="fc2"
            width="16" height="16"
          /><tmpl_var name="fc2">
          <br />
          <img src="images/livedoor.gif"
            alt="livedoor"
            width="16" height="16"
          /><tmpl_var name="livedoor">
          <br />
          <img src="images/pookmark.gif"
            alt="pookmark"
            width="16" height="16"
          /><tmpl_var name="pookmark">
          <br />
          <img src="images/buzzurl.gif"
            alt="buzzurl"
            width="16" height="16"
          /><tmpl_var name="buzzurl">
          <br />
          <img src="images/pingking.gif"
            alt="pingking"
            width="16" height="16"
          /><tmpl_var name="pingking">
          <hr />
          <img src="images/total.gif"
            alt="total"
            width="16" height="16"
          /><tmpl_var name="total">
        </div>
      </form>
      <hr />
      <p>
        <a href="http://blog.dtpwiki.jp/dtp/2008/03/post_88ba.html"
          target="_blank">ソースプログラムはこちら</a>
      </p>
      <dl>
        <dt>JSON/JSONP</dt>
        <dd>
          <a href="check.cgi?mode=json&callback=jsonp.callback&url=<tmpl_var
          name="url" escape="html">" target="_blank">
          check.cgi?mode=json&callback=jsonp.callback&url=<tmpl_var
            name="url" escape="html"></a></dd>
        <dt>JavaScript(document.write)</dt>
        <dd>
          <a href="check.cgi?mode=js&url=<tmpl_var
          name="url" escape="html">" target="_blank">
            check.cgi?mode=js&url=<tmpl_var
            name="url" escape="html"></a></dd>
      </dl>
    </div>
  </body>
</html>
    END_OF_HTML
    my $tmpl = HTML::Template->new( scalarref => \$tmpl_html );
    $tmpl->param( $html_hash );
    print $q -> header(
      -type    => 'text/html',
      -charset => 'utf-8',
      -expires => "+${expiry}",
      "Last-modified" => time2str($ctime),
    );
    print $tmpl->output();
    return;
  }
  
  # SBMサービスからブックマーク件数取得
  sub get_sbm {
    my $service = shift;
    my $url     = shift;
    if ( $service eq 'yahoo' ) {
      return get_sbm_yahoo( $url );
    }
    elsif ( $service eq 'delicious' ) {
      return get_sbm_delicious( $url );
    }
    elsif ( $service eq 'buzzurl' ) {
      return get_sbm_buzzurl( $url );
    }
    elsif ( ( $service eq 'fc2' )
         || ( $service eq 'pookmark' ) ) {
      return get_sbm_imageicon( $service, $url );
    }
    else {
      return get_sbm_xmlrpc( $service, $url );
    }
  }
  
  # XMLRPCによるブックマーク件数取得
  #(livedoor,hatena,pingking)
  sub get_sbm_xmlrpc {
    our $sbms;
    my $service = shift;
    my $url     = shift;
    my $result  = eval {
      XMLRPC::Lite->proxy(
                    $sbms->{$service}->{proxy},
                    timeout  => 5,
       )->call( $sbms->{$service}->{method}, $url )
        ->result
    };
    if ( $service eq 'pingking' ) {
      return $result->[0]->{ count };
    } else {
      return $result->{ $url } || 0;
    }
  }
  
  # Yahooブックマーク件数取得(REST)
  sub get_sbm_yahoo {
    our $sbms;
    my $url = shift;
    my $content = get( $sbms->{yahoo}->{proxy}.$url );
    my $count = 0;
    if ( $content =~ m|$sbms->{yahoo}->{regexp}| ) {
      $count = $1;
    }
    return $count;
  }
  
  # del.icio.usブックマーク件数
  sub get_sbm_delicious {
    my $url = shift;
    my $data
      = JSON::Syck::Load(
          get( $sbms->{delicious}->{proxy}.$url )
        );
    return $data->[0]->{total_posts} || 0;
  }
  
  # Buzzurlブックマーク件数
  sub get_sbm_buzzurl {
    my $url = shift;
    my $data
      = JSON::Syck::Load(
          get( $sbms->{buzzurl}->{proxy}.$url )
        );
    return $data->[0]->{users} || 0;
  }
  
  # ブックマーク件数イメージ提供サービスから件数取得
  sub get_sbm_imageicon {
    my $servce = shift;
    my $url    = shift;
    my $ua = LWP::UserAgent->new();
    $ua->agent('Mozilla/4.0 (compatible; '
              .'MSIE 6.0; Windows NT 5.1)'
    );
    my $req = HTTP::Request->new(
                'GET',
                $sbms->{$servce}->{proxy}.$url
              );
    my $res = $ua->simple_request($req);
    my $location = $res->header('location');;
    my $count = 0;
    if ( $location =~ m|$sbms->{$servce}->{regexp}| ) {
      $count = 0 + $1;
    }
    return $count;
  }
  
  # ブックマーク User数 HTML生成
  sub sbm_html {
    my $service = shift;
    my $url     = shift;
    my $count   = shift;
    
    my $tag;
    my $users = 'users';
    $users = 'user'   if $count == 1;
    $tag   = 'em'     if $count > 2;
    $tag   = 'strong' if $count > 9;
    my $tag_s = $tag ? "<$tag>" : q();
    my $tag_e = $tag ? "</$tag>": q();
    
    if ( $service eq 'delicious' ) { # del.icio.usの場合
      my $ctx = Digest::MD5->new;
      $ctx->add( $url );
      $url = $ctx->hexdigest; # del.icio.us用MD5生成
    }
    my $tmpl_html = << '    END_OF_HTML';
          
          <tmpl_var name="tag_s">
          <a href="<tmpl_var name="entry"><tmpl_var
            name="url" escape="html">"
            title="<tmpl_var name="message">"
            rel="nofollow" target="_blank">
            <tmpl_var name="count"> <tmpl_var name="users"></a
          ><tmpl_var name="tag_e">
    END_OF_HTML
    
    my $tmpl = HTML::Template->new( scalarref => \$tmpl_html);
    $tmpl->param(
      url     => $url,
      entry   => $sbms->{$service}->{entry},
      message => $sbms->{$service}->{message},
      tag_s   => $tag_s,
      tag_e   => $tag_e,
      count   => $count,
      users   => $users,
    );  
    
    return $tmpl->output();
  }
  
  # キャッシュ問い合わせ
  sub check_cache {
    our $cachedir;
    my $url = shift;
    my $data;
    my $cache = Cache::File->new( 
      cache_root      => $cachedir,
      default_expires => '3600 sec',
    );
    if ( $cache->exists( $url ) ) { # キャッシュ生きてる?
      $data = $cache->thaw( $url );
      $data->{expiry}  = $cache->expiry($url) - time();
      return $data;
    }
    else {                          # キャッシュ無効?
      my $expiry = 50 + int( rand( 50 ) ).'min';
      my $counts = { # SBMサービスからブックマーク件数取得
        yahoo     => get_sbm( 'yahoo',    $url ),
        hatena    => get_sbm( 'hatena',   $url ),
        delicious => get_sbm( 'delicious',$url ),
        fc2       => get_sbm( 'fc2',      $url ),
        livedoor  => get_sbm( 'livedoor', $url ),
        pookmark  => get_sbm( 'pookmark', $url ),
        buzzurl   => get_sbm( 'buzzurl'  ,$url ),
        pingking  => get_sbm( 'pingking', $url ),
      };
      $counts->{total} += $counts->{$_} foreach keys %$counts;
                                       # ブックマーク数合計
      $data = { 
        counts => $counts,
        ctime  => time(),
        expiry => $expiry,
      };
      $cache->freeze( $url, $data, $expiry );
        # キャッシュ書き込み
      return $data;
    }
  }
 
}
__END__

ザッピング - 受動系ソーシャルブックマーキング -
http://thatsping.com/

というのが始まっていました。
ロケスタ社長日記:ソーシャルブックマーキング「ザッピング」をリリースしてみました [blog.livedoor.jp]

ソーシャルブックマークサービスにおいて面倒なタグ付けを、検索エンジンの検索ワードと、対象ページの閲覧時間によって自動的に集計してタグ付けするみたいなんで、早速手もとにある面積の広いblog(このblogではないよ)へつけてみましたが、これMacIE5だとJavaScriptエラーが出よる。

encodeURIComponent()が無いのでエラーが出ているらしい。
手持ちにはMacIE5用decodeURI()ならあるんですけれども、encodeURI()の方は必要なかったんで用意していませんでした。

残念だなー

※このblogもMacIE5でいっぱいエラーがでよるが、これは仕様ですw

MacMiniで動いているLinuxサーバ、40GBのSeagateのディスクがどうやら2.5inchのSeagateの初物だったらしくあっという間に壊れたのでその後TOSHIBAだったかどっかの40GBに入れ替えて数年問題なく動いているのですけれども(確か過去のエントリに書いた)、バックアップ体制もとらんとやばいと思ってHDDを買ってきました(UPSはついているんだけれども)。バッファローの2.5inchの120GB USB2.0のポーダブルで耐衝撃性の奴。

MacMiniにつないだらあっけなくマウントしたのですが、バックアップに何を使おうか考えていませんでした。とりあえず、darでも使おうかなーと思ったけれども、PPC用のrpmがないので、tarを引っ張ってきてふつーにbuild。

これからバックアップ方針を決めようってところまでやった。

なにげにいろんなドメインのデータはいっとるのでバックアップ大事ですよね。

ほんとにキャンペーンやってたんだ!

Qxp41package1
▲パッケージ

Qxp41package2
▲キャンペーンクーポン

個人的には、4444円キャッシュバックよりも、QuarkXPress 7無償アップグレードクーポン券の方がいいんじゃねーかと思いましたが。クーポンの回収率で効果を測定するんだろうねー

~~~

まだAmazonでQuarkXPress4.1Jは手に入るようです。

  • : QuarkXPress 4 日本語版 for Macintosh

    QuarkXPress 4 日本語版 for Macintosh

  • QuarkXPress 4.1の販売は2008/3/31まで、ついにディスコン(絶版)なりますので、必要な方は超急いだ方がいいです!

    (2008-3-25 10.00追記)

    高機能版の記事書きました


    下のボックスにURLを入れると、いろんなオンラインブックマークでのブックマーク件数が表示されます。

    ブックマークの問い合わせは最初の1回だけ行って、その後はキャッシュします。

    ~~~

    Filename: check.cgi

    #!/usr/bin/perl
    use strict;
    use warnings;
    use Cache::File;
    use CGI;
    use Data::Dumper;
    use HTML::Template;
    use JSON::Syck;
    use LWP::Simple;
    use LWP::UserAgent;
    use utf8;
    use XMLRPC::Lite;
     
    binmode STDOUT => ':utf8';
     
    sbm();
     
    sub sbm {
      # 初期設定
      my $cachedir = 'cache';
      my $sbms = { 
           hatena =>
           {
             proxy   => 'http://b.hatena.ne.jp/xmlrpc',
             entry   => 'http://b.hatena.ne.jp/entry/',
             method  => 'bookmark.getCount',
             message => 'このエントリーを'
                       .'はてなブックマークでブックマークしているユーザ数',
           },
           livedoor =>
           {
             proxy   => 'http://rpc.clip.livedoor.com/count',
             entry   => 'http://clip.livedoor.com/page/',
             method  => 'clip.getCount',
             message => 'このエントリーを'
                       .'livedoor Clipでクリップしているユーザ数',
           },
           pingking =>
           {
             proxy   => 'http://api.pingking.jp/xmlrpc/bookmark',
             entry   => 'http://pingking.jp/url/',
             method  => 'getCount',
             message => 'このエントリーを'
                       .'PingKingでブックマークしているユーザ数',
           },
           yahoo =>
           {
             proxy   => 'http://num.bookmarks.yahoo.co.jp/yjnostb.php?urls=',
             regexp  => 'ct="(\d+)"',
             entry   => 'http://bookmarks.yahoo.co.jp/url?url=',
             message => 'このエントリーを'
                       .'Yahooブックマークしているユーザ数',
           },
           delicious =>
           {
             proxy   => 'http://badges.del.icio.us/feeds/json/url/data?url=',
             entry   => '',
             message => 'このエントリーを'
                       .'del.icio.usでブックマークしているユーザ数',
           },
           buzzurl =>
           {
             proxy   => 'http://api.buzzurl.jp/api/counter/v1/json?url=',
             entry   => 'http://buzzurl.jp/entry/',
             message => 'このエントリーを'
                       .'Buzzurlでブックマークしているユーザ数',
           },
           fc2 =>
           {
             proxy   => 'http://bookmark.fc2.com/image/users/',
             regexp  => '/(\d+)\.png',
             entry   => 'http://bookmark.fc2.com/search/detail?url=',
             message => 'このエントリーを'
                       .'FC2ブックマークしているユーザ数',
           },
           pookmark =>
           {
             proxy   => 'http://pookmark.jp/count/',
             regexp  => '/(\d+)$',
             entry   => 'http://pookmark.jp/url/',
             message => 'このエントリーを'
                       .'POOKMARKでブックマークしているユーザ数',
           },
         };
      # 開始
      my $q      = CGI->new();
      my $url    = $q->param('url') || 'http://www.yahoo.co.jp/';
      my $counts;
      # キャッシュ
      my $cache = Cache::File->new( 
        cache_root      => $cachedir,
        default_expires => '3600 sec',
      );
      if ( $cache->exists( $url ) ) { # キャッシュ生きてる?
        $counts = eval( $cache->get( $url ) );
      }
      else {                          # キャッシュ無効?
        my $expiry = 50 + int( rand( 50 ) ).'min';
        $counts = { # SBMサービスからブックマーク件数取得
          yahoo     => get_sbm( 'yahoo',    $url ),
          hatena    => get_sbm( 'hatena',   $url ),
          delicious => get_sbm( 'delicious',$url ),
          fc2       => get_sbm( 'fc2',      $url ),
          livedoor  => get_sbm( 'livedoor', $url ),
          pookmark  => get_sbm( 'pookmark', $url ),
          buzzurl   => get_sbm( 'buzzurl'  ,$url ),
          pingking  => get_sbm( 'pingking', $url ),
        };
        local $Data::Dumper::Terse  = 1; # シリアライズ用
        local $Data::Dumper::Indent = 0; # シリアライズ用
        my $selialize = Dumper( $counts );  # シリアライズ実行
        $cache->set( $url, $selialize, $expiry ); # キャッシュ書き込み
      }
      # キャッシュ処理終わり
      
      $counts->{total} += $counts->{$_} foreach ( keys %$counts );
                                         # ブックマーク数合計
      my $html_hash = { # テンプレート差し込み用HTML項目準備
        yahoo     => sbm_html( 'yahoo'    , $url, $counts->{yahoo    } ),
        hatena    => sbm_html( 'hatena'   , $url, $counts->{hatena   } ),
        delicious => sbm_html( 'delicious', $url, $counts->{delicious} ),
        fc2       => sbm_html( 'fc2'      , $url, $counts->{fc2      } ),
        livedoor  => sbm_html( 'livedoor' , $url, $counts->{livedoor } ),
        pookmark  => sbm_html( 'pookmark' , $url, $counts->{pookmark } ),
        buzzurl   => sbm_html( 'buzzurl'  , $url, $counts->{buzzurl  } ),
        pingking  => sbm_html( 'pingking' , $url, $counts->{pingking } ),
        total     => sbm_html( 'total'    , $url, $counts->{total    } ),
        url       => $url,
      };
      my $tmpl_html = << '  END_OF_HTML';
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html PUBLIC 
      "-//W3C//DTD XHTML 1.0 Strict//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
      xml:lang="ja" lang="ja">
      <head>
        <meta http-equiv="Content-Type"
          content="text/html; charset=UTF-8" />
        <title>
          オンラインブックマーク件数チェック
        </title>
        <meta http-equiv="content-style-type"
          content="text/css" />
        <link rev="made" href="mailto:aab61120@pop12.odn.ne.jp" />
        <link rel="index" href="." />
        <style type="text/css">
          body {
            font-size: 13px;
            *font-size: small;
            *font: x-small;
          }
          * {
            margin: 0; 
            padding: 0;
            line-height: 1.6;
            color: #333;
          }
          body {
            background-color: #fff;
            font-family: 'メイリオ',Meiryo,
                         'MS Pゴシック',sans-serif;
          }
          input {
            font-family: Osaka, 'メイリオ',Meiryo,
                         'MS Pゴシック',sans-serif;
          }
          h1 {
            font-weight: bold;
            font-size: 122%;
            margin-bottom: 20px;
          }
          img {
            border: 0;
            vertical-align: middle;
          }
          .posted em {
            background-color: #fff0f0;
            font-weight: bold;
            font-style: normal;
          }
          .posted em a,
          .posted em a:link,
          .posted em a:visited,
          .posted em a:hover,
          .posted em a:active {
            color: #f66; 
            font-weight: bold;
            font-style: normal;
          }
          .posted strong {
            background-color: #fcc;
            font-weight: bold;
            font-style: normal;
            display: inline;
          }
          .posted strong a,
          .posted strong a:link,
          .posted strong a:visited,
          .posted strong a:hover,
          .posted strong a:active {
            color: red;
            font-weight: bold;
            font-style: normal;
            text-decoration: none;
          }
          .posted a,
          .posted a:link,
          .posted a:visited,
          .posted a:hover,
          .posted a:active {
            text-decoration: none;
            color: blue;
          }
          #content {
            margin: 20px;
          }
          div.posted {
            margin  : 20px;
            font-size: 90%;
            line-height: 19px;
          }
        </style>
      </head>
      <body>
        <div id="content">
          <h1>
            <a href="./">
              オンラインブックマーク件数チェック</a
            >
          </h1>
          <form action="check.cgi" method="get">
            <p>
              <label for="url">アドレス:</label>
              <input name="url" id="url" style="width: 80%;"
                tabindex="1" accesskey="a"
                value="<tmpl_var name="url" escape="html">" />
              <input type="submit"
                tabindex="2" accesskey="s"
              />
            </p>
            <div class="posted">
              <img src="images/yahoo.gif"
                alt="yahoo"
                width="16" height="16"
              /><tmpl_var name="yahoo">
              <br />
              <img src="images/hatena.gif"
                alt="hatena"
                width="16" height="16"
              /><tmpl_var name="hatena">
              <br />
              <img src="images/delicious.gif"
                alt="delicious"
                width="16" height="16"
              /><tmpl_var name="delicious">
              <br />
              <img src="images/fc2.gif"
                alt="fc2"
                width="16" height="16"
              /><tmpl_var name="fc2">
              <br />
              <img src="images/livedoor.gif"
                alt="livedoor"
                width="16" height="16"
              /><tmpl_var name="livedoor">
              <br />
              <img src="images/pookmark.gif"
                alt="pookmark"
                width="16" height="16"
              /><tmpl_var name="pookmark">
              <br />
              <img src="images/buzzurl.gif"
                alt="buzzurl"
                width="16" height="16"
              /><tmpl_var name="buzzurl">
              <br />
              <img src="images/pingking.gif"
                alt="pingking"
                width="16" height="16"
              /><tmpl_var name="pingking">
              <br />
              <img src="images/total.gif"
                alt="total"
                width="16" height="16"
              /><tmpl_var name="total">
            </div>
          </form>
        </div>
      </body>
    </html>
      END_OF_HTML
      my $tmpl = HTML::Template->new( scalarref => \$tmpl_html );
      $tmpl->param( $html_hash );
      print $q -> header(
        -type    => 'text/html',
        -charset => 'utf-8',
      );
      print $tmpl->output();
      return;
      
      # SBMサービスからブックマーク件数取得
      sub get_sbm {
        my $service = shift;
        my $url     = shift;
        if ( $service eq 'yahoo' ) {
          return get_sbm_yahoo( $url );
        }
        elsif ( $service eq 'delicious' ) {
          return get_sbm_delicious( $url );
        }
        elsif ( $service eq 'buzzurl' ) {
          return get_sbm_buzzurl( $url );
        }
        elsif ( ( $service eq 'fc2' )
             || ( $service eq 'pookmark' ) ) {
          return get_sbm_imageicon( $service, $url );
        }
        else {
          return get_sbm_xmlrpc( $service, $url );
        }
      }
      
      # XMLRPCによるブックマーク件数取得(livedoor,hatena,pingking)
      sub get_sbm_xmlrpc {
        my $service = shift;
        my $url     = shift;
        my $result  = XMLRPC::Lite->proxy( $sbms->{$service}->{proxy} )
            ->call( $sbms->{$service}->{method}, $url )
            ->result;
        if ( $service eq 'pingking' ) {
          return $result->[0]->{ count };
        } else {
          return $result->{ $url } || 0;
        }
      }
      
      # Yahooブックマーク件数取得(REST)
      sub get_sbm_yahoo {
        my $url = shift;
        my $content = get(  $sbms->{yahoo}->{proxy}.$url );
        my $count = 0;
        if ( $content =~ m|$sbms->{yahoo}->{regexp}| ) {
          $count = $1;
        }
        return $count;
      }
      
      # del.icio.usブックマーク件数
      sub get_sbm_delicious {
        my $url = shift;
        my $data = JSON::Syck::Load( get( $sbms->{delicious}->{proxy}.$url ) );
        return $data->[0]->{total_posts} || 0;
      }
      
      # Buzzurlブックマーク件数
      sub get_sbm_buzzurl {
        my $url = shift;
        my $data = JSON::Syck::Load( get( $sbms->{buzzurl}->{proxy}.$url ) );
        return $data->[0]->{users} || 0;
      }
      
      # ブックマーク件数イメージ提供サービスから件数取得
      sub get_sbm_imageicon {
        my $servce = shift;
        my $url    = shift;
        my $ua = LWP::UserAgent->new();
        $ua->agent('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)');
        my $req = HTTP::Request->new('GET', $sbms->{$servce}->{proxy}.$url );
        my $res = $ua->simple_request($req);
        my $location = $res->header('location');;
        my $count = 0;
        if ( $location =~ m|$sbms->{$servce}->{regexp}| ) {
          $count = 0 + $1;
        }
        return $count;
      }
      
      # ブックマーク User数 HTML生成
      sub sbm_html {
        my $service = shift;
        my $url     = shift;
        my $count   = shift;
        
        my $tag;
        my $users = 'users';
        $users = 'user'   if $count == 1;
        $tag   = 'em'     if $count > 2;
        $tag   = 'strong' if $count > 9;
        my $tag_s = $tag ? "<$tag>" : q();
        my $tag_e = $tag ? "</$tag>": q();
        
        my $tmpl_html = << '    END_OF_HTML';
              
              <tmpl_var name="tag_s">
              <a href="<tmpl_var name="entry"><tmpl_var name="url" escape="html">"
                title="<tmpl_var name="message">"
                rel="nofollow" target="_blank">
                <tmpl_var name="count"> <tmpl_var name="users"></a
              ><tmpl_var name="tag_e">
        END_OF_HTML
        
        my $tmpl = HTML::Template->new( scalarref => \$tmpl_html);
        $tmpl->param(
          url     => $url,
          entry   => $sbms->{$service}->{entry},
          message => $sbms->{$service}->{message},
          tag_s   => $tag_s,
          tag_e   => $tag_e,
          count   => $count,
          users   => $users,
        );  
        
        return $tmpl->output();
      }
     
    }
     
    __END__

    はてなブックマーク件数取得API、livedoorクリップ件数取得APIだと、

    $VAR1 = {
              'http://pingking.jp/' => '301',
              'http://b.hatena.ne.jp/' => '1478',
              'http://del.icio.us/' => '942'
            };

    みたいな構造で返ってくるのですが、PingKingだと

    $VAR1 = [
              {
                'count' => '24',
                'url' => 'http://pingking.jp/'
              },
              {
                'count' => '9',
                'url' => 'http://b.hatena.ne.jp/'
              },
              {
                'count' => '6',
                'url' => 'http://del.icio.us/'
              }
            ];

    で返ってきます。つまり、この時点でlivedoorクリップやはてなブックマークのAPIのリザルト値と互換性がない。そんで、

    開発者の方へ : ブックマーク件数取得APIサンプルプログラム:Perl編 - PingKing(ピングキング) [info.pingking.jp]

    に載っているPerlでのプログラミング例

    #!/usr/local/bin/perl
    use strict;
    use warnings;
    use XMLRPC::Lite;
     
    # リクエストメッセージの作成 
    my @urls = qw(
    http://pingking.jp/
    http://b.hatena.ne.jp/
    http://del.icio.us/
    );
     
    my $proxy = 'http://api.pingking.jp/xmlrpc/bookmark';
     
    # メッセージの送信
    my $result = XMLRPC::Lite->proxy($proxy)
    ->call( 'getCount', @urls )
    ->result;
     
    # レスポンスの表示 
    printf( "%d\t%s\n", $result->{$_}, $_ ) for keys %$result;

    が、はてなやlivedoorのそれの丸写しになっているので、そのまま入力しても動きません。

    最後の一行を以下のようにすると動きます。

    printf( "%d\t%s\n", $_->{count}, $_->{url} ) foreach @$result;

    古紙リサイクルによる再生パルプ原料の再生紙が偽装にまみれていたことがわかった今だからこそ、FSC森林認証紙などの、バージンパルプを使っているけれども環境に配慮している印刷用紙製品の売り時だと思ったりします。

    なんでバージンパルプを使っているのに環境に配慮していることになるか、というと、木を切ったあと植林するなどの、森林を持続する活動、つまり森林循環がなされているからです。

    森林循環がなされている森林由来の原料を使っている紙は、森林循環紙と言うのですが、それを表示するマークがあります。

    ■森林循環紙■ [ssl.shimeitehai.co.jp]

    森林循環紙
    ▲今昔文字鏡の文字にありそう

    ぜったい[これはひどい]タグをつけちゃダメ!なんたって、FSCやSGECの上位レイヤーを示すマークなんで、

    森林循環マークは特に費用を必要とせず、その紙自体が森林循環紙であれば法人・個人を問わず使用できます。。また、申請する必要がありません。

    なんて使用条件が太っ腹すぎます。

    どんどん使おう!

    livedoor クリップ クリップ件数取得 API

    はてなブックマーク件数取得APIとは - はてなダイアリー
    のように、プログラムからYahooブックマークのブックマーク件数を取得したいというミッション。

    Yahooブックマークのhttp://num.bookmarks.yahoo.co.jp/ybmno.phpをrefererに対象URLをセットしてgetすると、

    HTTP/1.1 200 OK
    Cache-Control: no-store, no-cache, must-revalidate, max-age=0
    Connection: close
    Date: Tue, 18 Mar 2008 13:04:15 GMT
    Content-Type: text/xml
    Client-Date: Tue, 18 Mar 2008 13:04:11 GMT
    Client-Peer: 124.83.151.228:80
    Client-Response-Num: 1
    Client-Transfer-Encoding: chunked
    P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
    Set-Cookie: B=xxxxxxxxxxxxx&b=x&s=xx; expires=Tue, 02-Jun-2037 20:00:00 GMT; path=/; domain=.yahoo.co.jp
     
    document.write('<a href="http://bookmarks.yahoo.co.jp/url?url=http%3A%2F%2Fblog.dtpwiki.jp%2Fdtp%2F">18')
    <!-- bm-num04.ssearch.ogk.yahoo.co.jp uncompressed/chunked Tue Mar 18 22:04:15 JST 2008 -->

    のような断片が出てきますので、これから数字をパクります。

    Filename: get_yahoobookmarks.pl

    #!/usr/bin/perl
    use strict;
    use warnings;
    use LWP::UserAgent;
     
    my $url = 'http://blog.dtpwiki.jp/dtp/';
    my $count = get_sbm_yahoo( $url );
    printf("%d\t%s\n", $count, $url);
     
    exit;
     
    sub get_sbm_yahoo {
      my $url = shift;
      my $ua = LWP::UserAgent->new();
      $ua->agent('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)');
      my $req = HTTP::Request->new(
        'GET',
        'http://num.bookmarks.yahoo.co.jp/ybmno.php',
      );
      $req->referer( $url );
      my $res = $ua->request($req);
      my $content = $res->content;
      my $count = 0;
      if ( $content =~ m|document.write\('<.+?">(\d+)| ) {
        $count = $1;
      }
      return $count;
    }
     
    __END__


    後は、これにキャッシュ機構とかつけると完成です!

    これは、MacIEだと、http://num.bookmarks.yahoo.co.jp/ybmno.phpから出てくるやつがうまく利用できないくさかったので作る羽目になりました。


    (2008-03-20 17.27追記)

    Yahoo!ブックマークのブックマーク数を取得するAPI - blog.katsuma.tv [blog.katsuma.tv]

    SBMで被ブックマーク数を取得するときに、Y!ブックマークだけscriptタグでimg取得による方法しか見つからなかったのですが、どうにかテキストで取得できないかな、と考えてYahooツールバーのHTTPヘッダを見てたらなんとか分かりました。RESTなAPIがどうやら存在していた模様。こんな風に取得できます。

    http://num.bookmarks.yahoo.co.jp/yjnostb.php?urls=調べたいURL

    XMLで返ってくるとのこと。こっちの方がrefererむりくりセットしなくてもいいし、かっこいいよね。パースするの面倒だけど正規表現でいいよね。

    昨日までの私。

    Hatenafavapibefore
    ▲おくゆかしい

    おととい買ってきたバーンアウトパラダイスをプレーしていますが、リッジレーサーと違って道路外でも走れるしクラッシュし放題だしなにこれ!

    適当に走っててまずゲームの中の街の道路でも覚えることにします。でもこの街抜け道ばかりなんだよなー

    ※断裁機祭りへの参加は遠慮しておきます……

    これは気になる

    Aimasu
    ▲この前までみんなのたあ坊だったとこ

    これ年代ごとにでるの違う奴なのかな?

    PS3買ってリッジレーサー7買ってRSGP進行率が96.3%で止まってしまい、どうしたらいいんだろーていうことで相談したヘタレ力が高い僕は、「『バーンアウト』がいいんじゃないじゃろか」という天の声をネット越しに賜りそれを探しに旅に出たのですが、出かけたのがよる8時だったのが幸いして、お店がみなしまってやがって、国道沿いの中古屋さんを探してやっと見つけましたが、帰ってきたらどうやら70キロぐらい車で走っていたことに気づき今日プレイする気がなくなりました。

    最近僕はゲーム三昧やねー

    黄色

    | コメント(0) | トラックバック(0)

    ToHeart2を2年遅れでプレーしてやっと全員分クリアして、勧めてくれた子から「どの子がよかったー?」と聞かれたので、「僕は笹森花梨ちゃん!」とか答えたら、

    こんなURLが送られてきました。

    http://sound.jp/antiyellow/patch.html

    黄色削除パッチ

     Leaf/AQUAPLUS のPCゲーム『ToHeart2 XRATED』において、笹森花梨を出なくするパッチです。  ささらシナリオでも削除するパッチは、不具合があるようなので凍結中です。

    黄色なんだ……

    最近まともに読めてないんですけれども、P.50のイラストが田中圭一。

    クソワロタ

    田中圭一で過去取り扱った記事。
    M.C.P.C.: 「神罰」を女の子に勧められた

  • 田中 圭一: 神罰―田中圭一最低漫画全集

    田中 圭一: 神罰―田中圭一最低漫画全集

  • 「昆虫物語オケラのピー助」、連載時に立ち読みしてたんですよねー

    モトヤのPROX ELWINから書き出したPDFデータが入稿されることがたまにありますが、その場合、Acrobat Distillerのバージョンが4であることが多い気がするんですけれども、モトヤがどういう組み合わせでELWINとアドビソフトを抱き合わせ販売していたかという資料がオープンになっていないし、ELWIN使いはネットでは寡黙なので、これが調べようがないのです。

    何でこんな情報を知っておく必要があるか、というと、入稿されてきたPDFにセキュリティがかかっている場合、お客様の方で操作して解除していただく必要があるのですが、セキュリティの解除の操作は、お客様側のAcrobatのバージョンによって操作が違うからなんです。

    電話で連絡する前に事前にバージョンがわかっていれば、手もとに出しておく資料も少なく済みますよね。

    クセロと言えば無料のプリンタドライバ型PDF変換ソフト「瞬簡PDF ZERO」「クセロPDF2」などを頒布していますけれども、これらから出てきたPDFのメタデータ、なんだか間違っているんじゃねえかっていうものがありました。

    Xelopdfstatus01_s
    ▲瞬簡PDF ZERO

    Xelopdfstatus02_s
    ▲クセロPDF2

    アプリケーション(/creator)とPDF変換(/producer)のメタデータの内容が入れ替わっている雰囲気。おそらく、クセロPDF2の方がしくじっちゃったと思います。

    また、よく見ると、クセロPDF2の「Xelo PDFLibrary」ていうのが、空白少ないですね。こういうマネは文字列マッチングしてフロー分岐させるんだからやめて欲しいです。

    そんで、クセロさんに報告しようかどうか悩んでいますが、前、クセロPDFで、苦い思い出がありますゆえ、やめようかな。

    そんとき埒が開かなかったので自衛のために作ったスクリプトがこちら
    M.C.P.C.: クセロPDFの嘘つきPDF1.3を強制的にPDF1.4に変更するワンライナー
    M.C.P.C.: クセロPDFの嘘つきPDF1.3を強制的にPDF1.4に変更するスクリプト

    あと、PDFのメタデータ一覧はこちらでまとまっています。
    PDF変換の一覧 - DTPWiki [dtpwiki.jp]

    いやーいつの間にか会社の中に黒いiMac(24inch)がたくさん入っておって、日中は使わせてくれないので(こわすから)、夜中こっそり使ってみたんですが、

    24inch iMacは、普通に設置すると、台座的・フロントのデザイン的にどうしても視線が上方になる。ディスプレイモニタは、なるべく見下ろすように設置するのが基本なのに。なんでか、ていうと、視線が下方にあると、目を大きく見開かなくてもいいので、目が乾きにくいんだって。ほんとかな。あと、視線が上方だと、クビの筋肉も大変ですよね。

    そんで、今時のiMacは、板みたいなうすうすキーボードが付属なんですけれども、あれすごくね? お手々クラッシャーな気がするんですけれども。

    ていうわけで、オフィスワークするには分が悪いんじゃないかな、大画面iMac。と思いました。なに、今時Macを8時間使い続けるのはDTPの奴らしかいないからいいんじゃね、だって? ほっとけ! てういかほっとくな!

    ちゃんと厚労省からVDT作業のガイドラインもでていますんで。
    新しい「VDT作業における労働衛生管理のためのガイドライン」の策定について [www.mhlw.go.jp]

    キーボードが合わない場合は変えてみるのも手だし、視線が高くてクビが大変な場合は視線を低くするように机を変えるとかも検討しなきゃです。視線を下方にするために椅子を高くするとかしても、椅子の高さも疲労の原因につながってきますゆえ、大変ですよね。

    ちょっちぷれいすることになったToHeart2 XRATEDとToHeart2 AnotherDaysなんですがXRATEDをとりあえずフルコンプ。

    これでやっとAnotherDaysに進めるーとか思ってインスコしようと思ったんですけれどもこれネットワークドライブにインストールできないでやんの。とりあえずC:\Program Filesにインストールしてネットワークドライブに移動してプレイ。

    で、XRATEDのほうはダイナフォントの中太丸ゴシック体という、字体がひどく不評な奴を使っていたと思うんですけれども、やっぱり横組みにすると不揃いな文字たちでなんだげんなりになっていたわけですけれども、

    AnotherDaysの方は、フォントワークスになっていました。マニュアル見るとわかるよ。

    始めてから30分程度で、

    本文はスーラ-M(ちなみに和文とローマ字のベースラインがずれてきもい)
    「河野はるみ」とかのポップ体がPopジョイ-B
    「ドレイーっ!?」とかいう恐怖書体がミステリーDB

    て感じだったような気がします。

    フォントワークスはゲームソフトへのフォントライセンス好調みたいですねー

    ご利用にあたっての注意事項-iタウンページヘルプ [itp.ne.jp]

    禁止事項

    iタウンページでは、多くのお客様が快適にご利用できるよう、以下の行為は禁止しております。

    • iタウンページのサービスに多大な影響を与える行為
    • 自動的にアクセスするプログラムを使用してiタウンページに繰り返しアクセスする行為

    これらの行為が発見された場合には、予告なしにiタウンページへのアクセスを制限する事がありますのでご了承ください。

    題材的には誰もやりたくなるのだろうけどどおりでスクレーピング例が出てこないわけだ。

    (2008-03-08 19.42追記)

    繰り返さなければよい。

    Adobeのアプリやタブブラウザ、一部のWindowsのソフトは、[Ctrl]+[W]のキーボードショートカットで、カレントのウィンドウやタブが閉じますけれども、秀丸エディタもなにげにタブ化しているのにもかかわらず[Ctrl]+[W]でカレントタブが閉じません。というわけでカスタマイズしましょう。


    Hidemaructrlw_s

    ▲Ctrl+Wに閉じるを割り当て

    これ設定するまで、タブ閉じるのがおっくうで会社から帰る頃にはタブが14個ぐらいになっていましたが、これ設定してからというもの、やっぱりタブ閉じるのがおっくうでタブ10個ぐらいになっています。

    ともかくお試しあれ。

    ※来月あたりからEclipse使うことになるかも。ビバIDE環境!

    「SBMの利用者はわずか2%」が嬉しい - kawasakiのはてなダイアリー [d.hatena.ne.jp]

    このニュースはとても嬉しかった。まだまだはてなブックマークの伸びしろがたくさんあるということが分かったから。わくわくします。

    僕の考えでは、業務で使ったSBMが役に立って成功体験を得たユーザが私用でも使う、みたいな流れが取り得ると思います。だから、SBM屋さんが特定業界向けにカスタマイズしたSBMをその業界で有名な企業にOEM提供してその業界内で便利に利用してもらい、ユーザを増やせる余地はあると思っとるのです。なんでOEMかというと、「株式会社はてな」とかの名前が最悪だから!

    例えば、業界の有力企業がやっているSBMと、僕が作ったSBM(一応作れるぞ)を比較したら当然有力企業の方を選ぶっしょ。SBMのSの部分、ブックマークの共有性については、OKWave→教えて!goo方式で、OEM元のSBMに還流される方式で。

    そんで、例えば印刷業界に業界専用SBMサービスが出来れば、
    M.C.P.C.: Trueflowの手引きWebにはてなブックマーク被Users表示をつける改良案と、User JavaScript
    みたいなのもUser JavaScriptではなくて最初から表示されるようになのではないかな。

    というわけで株式会社はてなも京都に移転したわけで、同じ京都にある大日本スクリーン製造株式会社(DS)あたりとなんかやってほしいなーて思ったり思わなかったり。でも、DSが音頭とってもFFGSぐらいしか賛同しないかね、難しいかなー

    ~~~

    こっからは、個人的にいろいろ印刷業界内でのSBMの立ち位置について調べた資料の提示。

    まず、僕が作った印刷業界の企業のはてなブックマークランキング。

    印刷会社被ブックマークランキング [ranking.dtpwiki.jp]

    次、業界での認知度はどうか。mixiのDTPコミュニティでアンケート取った結果。

    http://mixi.jp/view_enquete.pl?id=11037073&comm_id=2079
    http://mixi.jp/view_enquete.pl?id=19067086&comm_id=2079
    http://mixi.jp/view_enquete.pl?id=25660505&comm_id=2079

    アンケートって、そもそも答えようと思う時点で質問事項に興味を持っているわけだから、最近の結果を単純に読んで業界内にSBM知らない人がいない、つーことにはならいと思うわけです……

    まとめると、活用されているとは言い難いな、ていう感じです。

    この前知り合いのWindows XPパソコンで文字化けしよるんということで、またJIS2004対応MSフォントを入れちまったのかなーと思ったんですけれども本人は覚えがない、インストール履歴も探せないということで、結構前に作ったInstFont.infoというサービスを使ってもらいました。

    http://instfont.info/
    http://インストフォント.jp/でもアクセス可)

    これを使うと、マシンに入っているフォントをリストアップし、MSフォントが、JIS90フォントか、JIS2004フォントか判断した結果の画面が出ますので、その画面のURLをコピペしてメールとかMSNメッセンジャーやSkypeなどで教えてあげてください。

    今回の例で言えば、

    1. 相手の方にMSNメッセンジャーでhttp://instfont.info/のアドレスを教える
    2. 相手は、IE6または7でアクセスする。
    3. 画面に従い操作する
    4. リストが表示される
    5. 表示されたブラウザのアドレス欄のURLをコピーし、MSNメッセンジャーで僕に送られてくる
    6. 僕が送られてきたURLを開く

    Instfont200803
    ▲ただのWindowsXPには興味ありません!

    タダなので使ってみてください!

    事業再編に関するお知らせ [www.mitsubishielectric.co.jp]

    つまり三菱電機が携帯電話事業やめるんだって。僕のFOMAはDだから三菱なんですが!

    三菱電機端末と言えばモリサワフォント。

    新ゴ - Wikipedia [ja.wikipedia.org]

    モバイル機器における新ゴ

    モリサワは2005年に携帯電話やPDA向けのアウトラインフォントとして新ゴRベースに軽量化・ラスタライズの高速化を施した "KeiType" をリリースしており、NTTドコモの一部携帯電話端末(2004年以降の富士通製または三菱電機製)などで採用されている。小型液晶モニタであるためディザが目立ちがちであった携帯電話の文字表示も、KeiType採用機ではアンチエイリアスが施され、パソコン並の美しい文字表示が可能になっている。

    新たな顧客を捜すのだー

    たとえばToHeart2のあのダイナフォントの代わりとかね。

    新商品の発表:オフセット印刷機用「LED-UV印刷システム」 (PDF)[www.ryobi-group.co.jp]
    東洋インキ製造/LED方式UV乾燥装置用UVプロセスインキを開発 [www.print-better.ne.jp]

    以下引用めんどいのでPrint-Betterの方から。

    一方,UVインキは無溶剤(VOCゼロ)であること,その乾燥工程において熱風ドライヤーを使用せずに瞬間乾燥させる事が可能な事から,直接CO2を発生しない,環境にやさしい印刷システムとしての評価も高まっている。

    いま何が環境に優しい印刷システムだか良くわかんないよ。理由は後述。

    このシステムのUV(紫外線)硬化には従来のランプ方式に替わって,長寿命,低消費電力のLED方式を採用しており,環境負荷の低減が課題となっている印刷業界において,次世代のUV印刷システムとして期待されている。

    これってプリンタで言うところの沖データのLEDアレイみたいなアプローチですよね。

    このLED方式のUV印刷システムは従来のランプ方式に比較して次のようなメリットを持っている。

    (1)消費電力が70~80%少なくてすみ,電気代が削減できる。
    (CO2換算で約25トン/年,森林面積で約1.9 ha/年の環境負荷の軽減に相当※)
    (2)光源が長寿命で交換頻度を大幅に減らすことができる。(対ランプ方式比較 12倍)
    (3)オゾン発生がなく,環境にやさしい。また,換気のためのダクト工事が不要。
    (4)赤外線を含まないので印刷資材(特にフィルム)や印刷機への熱影響が抑えられる。
    (5)瞬時に点灯,消灯でき,乾燥装置に依存する待ち時間が発生しない。
    (6)用紙幅に合わせた照射幅の制御が可能で,LEDの効果的な運用が行なえる。
    (7)LED直下でも常温を維持しており,安全性が高い。
    (8)コンパクトな制御キャビネットで省スペース設置が図れる。

    というわけで、すでにUV印刷機持っているところでこういうのにリプレイスできると確実にスゲエ環境負荷低減になると思いますけれども、そもそもUVインキは、印刷物を再生パルプにするときの脱墨行程がUVインキでないインキでの印刷物に比べて脱墨しにくいという話しも聞いたことがあるので、表面加工などでどうしてもUV照射が必要な場合はしょうがないけれども、トータルな環境負荷はどうなのよ、ということのようです。

    インキメーカーはインキだけの環境負荷の数値を出すし、機械メーカーは機械、製紙メーカーは紙の製造、それぞれの数値が出ますけれども、これトータルで判断するにはどうしたらいいんでしょう。これ算数じゃ解決しないですよね。

    ヤクド

    | コメント(0) | トラックバック(0)

    MSNメッセンジャーで話している女の子にものすごい剣幕でToHeart 2 Another Daysとやらを勧められたので、たまにはゲームもいいよね、とか思いヨドバシカメラにいって買ってきました。でも、これシリーズものなので、前作に当たるToHeart 2 XRATEDっていうのも買ってきました。そんで、ポイント使って1500円そこらで購入できました。それにしてもヨドバシカメラ、どー見ても発注ミスみたいなAnother Daysタワーのできばえでした。

    そんでこれプレーするとヤクドにいきたくなるわけだけれども、ヤクドまでクルマで20分かかるんよね。CoCo壱番屋は35分ぐらいかかりよる。やっぱりファストフードの店は人口多いか、幹線国道にしかできないわけですよね。田舎が恨めしい。

    そういや高校の隣にヤクドがあったんだけれども3年間ついぞ行かなかったな。田舎もんだったし、ヤクドには不良がたむろしていると思っていたから。ヤクド食いだしたのは社会人はいってからという遅さです。

    ゲームを勧めてくれた女の子の方は、Amazonで届いたAnother Daysインストールするものの文字化けしまくって「ここまでバグがすごいとあきれるのを通り越してワラタ」とかいってました。ちゃんとプレイできとるんだろか。

    (2008-03-03 11.35追記)

    さっき女の子から連絡来て、

    インテルのグラフィックなんちゃらのアクセラレーターなんちゃらを
    なんちゃらがどうとかこうとかで
    訳も分からずとりあえずダウンロードしてアップデートしてみたら
    文字化けがぴたりと収まった

    文字化けしてたらグラボのドライバのなんちゃらをダウンロードしてみられたしw

    日本のDTPを引っ張ってきた人物の一人、市川せうぞーさんが、DTPのblogを始めました。

    まだタイトル決めてない
    http://d.hatena.ne.jp/seuzo/
    [d.hatena.ne.jp]

    僕は、こういうのが、Web2.0的な意味でのDTP2.0になると思います。今のDTPの問題は情報の流通が不健全であることだと思っていますゆえ、実績のある方がフラットな情報流通に参加されるというのは大きいと思います。

    月別 アーカイブ

    ウェブページ

    OpenID対応しています OpenIDについて
    Powered by Movable Type 5.2.7

    このアーカイブについて

    このページには、2008年3月に書かれたブログ記事が新しい順に公開されています。

    前のアーカイブは2008年2月です。

    次のアーカイブは2008年4月です。

    最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。