2008年6月アーカイブ

Planet DTP@jpのメンテナンスとかしようと思ってRSSを調査していたら、アメブロがREFERERついていると画像を参照できないと言うことで、画像表示用CGIと、RSS置換CGIを挟めてちゃんと表示されるようになりました。

そのとき利用したはてなダイアリー用RSS置換CGIというのがありまして、はてなフォトライフ参照のはてな記法をimg要素に書き換えたりするのですけれども、よーく調べてみると、はてなダイアリーが用意するRSS 2.0の方のdescription要素の中では、はてな記法ではなくて普通にimg要素になっていて脱力しました。

また、はてなダイアリーのRSS 1.0では全文配信になっていないから途中でぶつ切りだったのですが、RSS 2.0を使うようにしたら全文入っていました。

というわけで、Planet 見やすなりましたとさ。

Planet DTP@jp http://dtpwiki.jp/planet/

以前、M.C.P.C.: 嗚呼!印刷工! 雑記のRSS作った(野良Feed) [blog.dtpwiki.jp]

で作ったFeedが、元ページのHTML構造が変わったので(●による見出しだったのがいきなりh1要素使うようになっておった……)。

ていうわけで直しました。

http://dtpwiki.jp/rss/insatsuman.xml

お使いください。

あと、以前使っていた生成コードのソースも置いておきます。

Filename: insatsuman.pl

#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
use utf8;
use Encode;
use XML::RSS;
 
my $html = decode('cp932', get('http://www.geocities.jp/insatsuman/notebook.htm') );
$html =~ s/\x0D\x0A|\x0D|\x0A/\n/g;
$html =~ s|^.+<pre>||s;
$html =~ s|</pre>.+$||s;
 
my $list;
my $key;
foreach my $line (split "\n", $html) {
  if ($line =~m|<i><font size="4">●(.+)</font></i>| ){ 
    my $date = $1;
    $key = parse_date($date);
    $list->{$key}->{date} = $date;
    next;
  }
  $list->{$key}->{description} .= "$line\n" if $key;
}
 
my $rss = XML::RSS->new;
$rss->add_module(
  prefix=>'content',
  uri=>'http://purl.org/rss/1.0/modules/content/',
);
$rss->add_module(
  prefix=>'annotate',
  uri=>'http://purl.org/rss/1.0/modules/annotate/',
);
 
$rss->channel(
    title    => '嗚呼!印刷工! 雑記',
    link     => 'http://www.geocities.jp/insatsuman/notebook.htm',
    description => '嗚呼!印刷工! 雑記 最新書き込み',
    language => 'ja',
    dc => {
      publisher    => '嗚呼!印刷工!',
      contributor  => 'DTPWiki.jp',
    },
    syn => {
      updatePeriod => 'hourly',
      updateFrequency => '1',
    },
);
 
foreach my $key (reverse sort keys %$list) {
  $rss->add_item(
      link  => 'http://www.geocities.jp/insatsuman/notebook.htm#'.$key,
      title => $list->{$key}->{date},
      description => clean_html( $list->{$key}->{description} ),
      dc => {
        date       => $key,
        creator    => '三流印刷工',
      },
      content => {
        encoded => "<![CDATA[<pre>".replace_html($list->{$key}->{description})."</pre>]]>",
      },
  );
}
 
print encode('utf8', $rss->as_string() );
 
exit;
 
sub parse_date {
  #01月17日(木)
  my $date = shift;
  $date =~ s|日.+$||;
  $date =~ s|月|-|g;
  $date = "2008-".$date."T00:00:00";
  return $date;
}
 
sub clean_html {
  my $html = shift;
  $html =~ s/<.+?>//sgo;
  return $html;
}
 
sub replace_html {
  my $html = shift;
  $html =~ s| src=\"| src="http://www.geocities.jp/insatsuman/|sgo;
  return $html;
}

CGI::Application::Plugin::ValidateRMを入れようと思ってCPANからインストールしようと思ったら、testでこける。

調べてみたら、

CPAN Testers: Reports for CGI-Application-Plugin-ValidateRM [cpantesters.perl.org]

最新バージョン(当時2.2)だとFAILのレポートばっかり!

もっと調べて、

BUGFIX: t/forward.t - problem with HTML::FillInFor: msg#00040 [osdir.com]

にて、HTML::FillInFormモジュールが0.7以上で戻り値が変わっている(現行バージョンは2.00)からテスト失敗するみたいなの書いていて、パッチもあったので、CPANぬけて/root/.cpan/build/CGI-Application-Plugin-ValidateRM-2.2/t/forward.t を書き換えて、make test;make install してインストールできました。

問題は、このモジュール使い方良くわかんねことです。


(2008-12-23 1:20追記)

タイトル変更
CPANからCGI::Application::Plugin::ValidateRM入れるとほぼ必ずtestで失敗するのでパッチが必要

CPANからCGI::Application::Plugin::ValidateRM 2.2入れるとほぼ必ずtestで失敗するのでパッチが必要

<add>(当時2.2)</add>

いきなりはてブされたので補足入れますが、このエントリ書いたときのCGI::Application::Plugin::ValidateRMはVersionが2.2で、これは本文の通りレポートでFAILだらけでした。現在、Version 2.3になっていて、PASSだらけになっています。

CPAN AuthorになってからわかったんですがFAIL付きまくりのバージョンリリースしちゃうと凹みますね。

言 壺。 : 教えてえらいひと☆InDesignの組版! [kototubo.exblog.jp]

むりくりやるなら、こんな方法を提案します。

Inddinlineobject
▲フレームグリッドをインラインオブジェクトにする

1字分のフレームグリッドを作り、そこに「20」を入力、それを本文のフレームグリッドの中にインラインオブジェクトとして挿入。

テキストは必ずしもテキストで組まなくてもいいというのは、QuarkXPressの作字のアンカーボックスでさんざんやられていたわけで、それのリバイバル版です。

ね、簡単でしょ?

# 作字はインラインオブジェクトで済む範囲だったらSING外字使う必要ないやんか、と思ってる

気になったので、@nifty投票で作ってみました。もうmixiプレミアムのアンケート使うのめんどくせのでこっちでいいよね。

質問文:Windows XP(Vista除く)のDTPで、ユーザアカウントの所属グループ権限は? [vote.nifty.com]

投票は↓より(JavaScript有効で表示されます)

2008/8/31まで。


(2008-9-15 1:06追記)

アンケートの結果は、

M.C.P.C.: DTPにおけるWindows XPのユーザ権限のアンケート集計結果。Administratorsグループ権限で作業している人が過半数。

にて掲載しました。

僕のノートパソコンはだいたい1年に1回HDDの交換をするのですが、今回のノートパソコンは、100GB HDDのシリアルATAなんで、これdo台HERO+の場合、シリアルATA用アダプタが1つ同梱なんですけれども、もう1つ別売りのシリアルATAアダプタを用意する必要があり、Amazonを利用してやっとか手に入れて、あらかじめ買っておいた120GB HDDにクローンしようと思いました。

そんで、1時間半ぐらいでこれdo台HERO+でのクローニングは終わったけれども、カスペルスキーのアクティベーションを削除していなかったので、あたらしいHDDで起動すると、カスペルスキーの定義ファイルは壊れていると出るわ、アクティベーションされていないと出るわ、その状態だとネットに繋がらないわ、大変でした。

旧HDDのカスペルスキーのアクティベーション情報を削除し、クローニング、新HDDの方でアクティベーションをする、と言う手順を踏まないと、何度もHDDを差し替えてブートする羽目になるので、気をつけましょう。

DBに入っているul要素やol要素で作られたリストのHTML文章を、プレーンテキストにして、フロント側のtextarea要素や、pre要素のところに表示する必要があったので、CPANから、HTML→プレーンテキストに変換するモジュール、HTML::FormatTextをインストールして試してみました。

Filename: html2text.pl

use strict;
use warnings;
use HTML::TreeBuilder;
use HTML::FormatText;
use utf8;
 
my $html = << 'END_OF_HTML';
<ul>
  <li>Adobe
    <ul>
      <li>
        Adobe Creative Suite CS 3.3 Design Premium
        <ol>
          <li>
            Adobe InDesign CS3
          </li>
          <li>
            Adobe Photoshop CS3 Extended
          </li>
          <li>
            Adobe Illustrator CS3
          </li>
          <li>
            Adobe Flash CS3 Professional
          </li>
          <li>
            Adobe Dreamweaver CS3
          </li>
          <li>
            Adobe Acrobat 9 Pro
          </li>
          <li>
            Adobe Fireworks CS3
          </li>
        </ol>
      </li>
      <li>
        Adobe Creative Suite CS 3.3 Design Standard
        <ol>
          <li>
            Adobe InDesign CS3
          </li>
          <li>
            Adobe Photoshop CS3
          </li>
          <li>
            Adobe Illustrator CS3
          </li>
          <li>
            Adobe Acrobat 9 Pro
          </li>
        </ol>
      </li>
    </ul>
  </li>
</ul>
END_OF_HTML
 
my $tree      = HTML::TreeBuilder->new->parse( $html );
my $formatter = HTML::FormatText->new(
                  leftmargin  => 0,
                  rightmargin => 72,
                );
(my $text = $formatter->format($tree) )
  =~ s|^\n||mgo;
binmode STDOUT => ':utf8';
print $text;
 
exit;
 
__END__


実行結果:

$ perl html2text.pl
  * Adobe
      *  Adobe Creative Suite CS 3.3 Design Premium
          1.  Adobe InDesign CS3
          2.  Adobe Photoshop CS3 Extended
          3.  Adobe Illustrator CS3
          4.  Adobe Flash CS3 Professional
          5.  Adobe Dreamweaver CS3
          6.  Adobe Acrobat 9 Pro
          7.  Adobe Fireworks CS3
      *  Adobe Creative Suite CS 3.3 Design Standard
          1.  Adobe InDesign CS3
          2.  Adobe Photoshop CS3
          3.  Adobe Illustrator CS3
          4.  Adobe Acrobat 9 Pro
$

とても便利。

MIME::Liteで普通にメールを生成すると、

Date: Mon, 23 Jul 2008 10:00:00 UT

ていうヘッダが入ってイヤだ、という話題。何がイヤだか、ていうと、日本標準時(JST)でないので、Dateヘッダをそのまま採用するMUA(Mozilla Thunderbirdなど)でプリントアウトすると時刻が直感的にわからんのです。

最近入稿システムのメール連絡を面倒だからといって今までMIME::EntityでプログラムしていたところをMIME::Liteで組んでみたら発生した。Liteたるゆえんか。

再現コードどうぞ。

use strict;
use warnings;
use utf8;
use Encode;
use MIME::Lite;
use HTTP::Date;
 
my $msg = MIME::Lite->new(
    From      => 'from@example.com',
    To        => 'to@example.com',
    Subject   => Encode::encode('MIME-Header-ISO_2022_JP', 'コンニチワ'),
      # EncodeでMIME-Header-ISO_2022_JPが使えるのは
      # Perl5.8.6以降同梱のもの
    Type      => 'text/plain; charset="ISO-2022-JP"',
    Encoding  => '7bit',
    Data      => encode('iso-2022-jp', '元気でやってるかー?'),
);
 
$msg->send();

上記コードではDateヘッダ入れていませんが、MIME::Liteで勝手に現在時刻から入れます。それが、UT(世界時)になってしまう罠。

というわけで、MIME::Liteには、Dateヘッダを自分で設定するためのオプションとして、Datestamp => 0 を指定する方法がありますので、自分で時刻文字列作ってしまうことで、DateヘッダがUT(世界時)になることを防げます。

use strict;
use warnings;
use utf8;
use Encode;
use MIME::Lite;
use HTTP::Date;
 
my $msg = MIME::Lite->new(
    From      => 'from@example.com',
    To        => 'to@example.com',
    Subject   => Encode::encode('MIME-Header-ISO_2022_JP', 'コンニチワ'),
      # EncodeでMIME-Header-ISO_2022_JPが使えるのは
      # Perl5.8.6以降同梱のもの
    Type      => 'text/plain; charset="ISO-2022-JP"',
    Encoding  => '7bit',
    Data      => encode('iso-2022-jp', '元気でやってるかー?'),
    Datestamp => 0,
    Date      => 'Mon, 23 Jun 2008 20:00:00 +0900',
);
 
$msg->send();

なんてかんじにするとヘッダに好きな時刻を設定できます。

さて、時刻文字列を作る方法ですが、5つぐらい探しました。

#!/usr/bin/perl
use strict;
use warnings;
 
sub datestr0 {
  # UNIXのdateコマンド使う方法
  # dateコマンドの動作が違と動かない
  (local $_ = `date -R`) =~ s/\n//sgo;
  return $_;
}
 
sub datestr1 {
  # モジュールを使わない方法
  # via http://tech.bayashi.net/pdmemo/sendmailbyperl.html
  my ( $sec, $min, $hour, $mday, $mon, $year, $wday )
    = localtime( time );
  my @week  = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
  my @month = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
               'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' );
  my $d = sprintf( "%s, %d %s %04d %02d:%02d:%02d +0900",
                   $week[$wday], $mday, $month[$mon],
                   $year + 1900, $hour, $min, $sec,
          );
  return $d;
}
 
sub datestr2 {
  # HTTP::Dateモジュールを使用
  # via http://ja.doukaku.org/24/nested/
  use HTTP::Date;
  my $tz = +9;
  ( my $date = HTTP::Date::time2str( time + $tz * 3600 ) )
      =~ s/GMT/sprintf( '%+03d00', $tz )/e;
  return $date;
}
 
sub datestr3 {
  # Date::Manipモジュールを使用
  # via http://search.cpan.org/~sbeck/Date-Manip-5.54/lib/Date/Manip.pod
  use Date::Manip;
  return UnixDate('today', '%g');
}
 
sub datestr4 {
  # DateTime::Format::Mailモジュールを使用
  # via http://search.cpan.org/~sbeck/Date-Manip-5.54/lib/Date/Manip.pod
  use DateTime;
  use DateTime::Format::Mail;
  return DateTime::Format::Mail->format_datetime(
           DateTime->now(
             time_zone => 'Asia/Tokyo',
           )
         );
}
 
print datestr0()."\n";
print datestr1()."\n";
print datestr2()."\n";
print datestr3()."\n";
print datestr4()."\n";
 
__END__

実行結果:

$ perl date.pl 
Mon, 23 Jun 2008 19:49:23 +0900
Mon, 23 Jun 2008 19:49:23 +0900
Mon, 23 Jun 2008 19:49:23 +0900
Mon, 23 Jun 2008 19:49:24 +0900
Mon, 23 Jun 2008 19:49:24 +0900
$

それぞれの評価:

datestr0バッククオート演算子危ないので使用禁止
datestr1Perlのみテッパン
datestr2HTTP::Dateモジュール割と素直。環境依存しにくい
datestr3Date::Manipモジュール一番楽だがWindowsだと動かない可能性あり
datestr4DateTime::Format::Mailモジュールプログラム内でDateTime使ってしまったときについでに使う。

こう書いていると、なんだか大がかりになってきたので、普通にMIME::Entity使った方が楽なんじゃないかという気にもなってきました。

Logicsystem : Elemental: ひっくりかえった [logicsystemelemental.sblo.jp]

http://support.adobe.co.jp/faq/faq/qadoc.sv?233979+002+3

いや、そりゃねーだろAdobeさんよw

何が起こっているのかーと思って見に行ってみたよ。

[233979]Mac OS X 10.5.3で、ネットワークサーバに保存したファイルを開けない(Photoshop CS3)

問題点 (Issue)

Mac OS 10.5.3 環境において、ネットワークサーバに保存したファイルを開こうとすると、エラーメッセージ 「Could not complete your request because it is not a valid Photoshop document (Photoshop ファイルが無効のため、要求された動作を完了できません。)」 が表示され、ファイルを開けない。

理由 (Reason)

これは、アップル社と弊社において既知の問題です。

解決方法 (Solutions)

問題を解決するためには、以下の A. ~ B. のいずれかを実行します。

  • A. ネットワークサーバを使用せずに作業する ローカルディスク上でファイルを完成させてから、そのファイルをネットワークサーバにコピーしてください。
  • B. 「別名で保存」で保存する  重要 : この回避方法は、弊社での検証を行っていません。弊社は、ファイルをネットワークドライブに直接保存することについてサポートしていません。

うわーん

追加情報 (Additional Information)

サーバへの直接書き込みは保存機能のコンプレックスレベルを上げるため、弊社はサーバにファイルを直接保存することを推奨していません。 複数のファクターが、ネットワーク経由(ファイルサーバ、ルータ、ブリッジ、ネットワークカード、ソフトウェア、ケーブル、コネクタ、電源ケーブルおよび電源を含む)のデータトランスミッションに影響します。ネットワーク接続が突然途切れたり、データ損失やアプリケーションエラーのリスクが増したりします。 交信中あるいは受信中、ネットワークソフトはデータが送られ、また、受け取られたことを確認します。その検証の程度はネットワークソフトのパッケージによるものであり、OS側から操作できない場合もあります。ネットワークに接続しファイルを保存しようとした場合、「Could not complete the request because the file is locked. (ファイルがロックされているため、要求された動作を完了できません。)」 「Could not save because of a disk error. (ディスクエラーのため、保存できません。)」 などのエラーが発生する場合があります。しかしながら、ネットワークならびにOSは、Photoshopファイルまたはスクラッチディスクファイルがダメージまたは不完全な情報を含んでいることを認識していない場合があります。

「お客様の中で、ファイルシステム・ファイル操作・OS周りに詳しいソフトウェアエンジニア様がいらしたら、AdobeSystemsまでお願いします!」

QuarkXPressのネットワークストレージ上でのファイル保存の失敗から始まり、DTPの現場では、「ローカルにコピーしてから開け」「それだとサーバへの保存が徹底しないから印刷事故の原因になる」「そもそも当方だとネットワーク上で開いて保存しても問題ないよ?」「Photoshopだとネットワーク上に直接保存するとなぜか水平にノイズが入ることがある」などなどいろいろ言われていましたけれども、アドビがさじ投げたらあかんだろ。

DTPの人間が言うてもあんまりくみ取ろうとしないだろうけれども、さすがにPhotoshopはDTP以外の分野でもしこたま使われているから、他の業界の人も巻き込んで直せ直せとずびしっと言ったら直ったりすることを信じたいです。だれか、政府機関のPhotoshop使いの方いらっしゃいませんか!

昨日の記事を書いた後、PPMのモジュールに、Image::Magick::Tiler と言うのがあるのに気づきました。Image::Magickを利用したユーティリティモジュールですね。画像のタイリング分割に特化しています。

使用例:

D:\SOLID_SNAKE>perl -MImage::Magick::Tiler -e "Image::Magick::Tiler->new(input_file=>'snake.png', geometry=>'1x5', write=>1, verbose=>1)->tile();"
Image::Magick:        V 6.4.1.
Image::Magick::Tiler: V 1.00.
Geometry:             1x5 parsed as NxM+x+y = 1x5+0+0.
Image:                snake.png.
Image size:           (800, 3000).
Tile size:            (800, 600) (before applying x and y).
Tile size:            (800, 600) (after applying x and y).
Wrote:                1-1.png.
Wrote:                2-1.png.
Wrote:                3-1.png.
Wrote:                4-1.png.
Wrote:                5-1.png.
 
D:\SOLID_SNAKE>

ファイル名が指定できないっぽい部分を我慢すれば、使えるかもしれませんね。

最近のゲームは、画像読み込み用のメモリを潤沢にとれるのをいいことに、ある1シーンの画像を縦長に連ねておいたものを用意していることが多いです。表示するときに、ビューポイントを切り替えてあげることで画像が変化できるっぽい。

それだと、せっかくのムフフ画像が(ry

というわけで、以下の画像のコマを切り出して個別の画像ファイルにするPerlスクリプトです。


今回、こんなのを用意しました。

Splitimage01
▲スネーク潜入中です

ActivePerlでImage::Magickをインストール

この手の作業で定番のImageMagickを使います。

今回は、ActivePerlで作業するので、Perl Package Manager(PPM)から、Image::Magickパッケージをインストールします。昔は、Image::MagickをActivePerlで入れるのにも結構苦労していましたが、今時はこんなに楽です。スタートメニューから、「ActivePerl 5.8.x Build xxx」というグループを選ぶと、「Perl Package Manager」というのがありますので、それを起動すると下の画面のようになります。

Activeperlimagemagick
▲PPMでImage::Magick入れる

  • ①すべてのパッケージ表示にする
  • ②いっぱいありすぎるので、検索ボックスにImageと入れる
  • ③絞られたパッケージ表示の中から、Image-Magickを選ぶ
  • ④パッケージインストールマークボタンを選択
  • ⑤右矢印ボタンを選択して、インストールする

Image-Magickが2種類ありますが、トラブルさけるためには、QD=8選んでおくといいみたい

Activeperlimagemagick2
▲せっかくだから「OK」を選びます

これで、Image::Magickモジュールが入ります。ちなみに、PPMの下の方に、インストール状況が表示されますので、そこでインストールが完了したかどうか確認してください。

プログラム

今回は、画像の一コマの大きさが800x600であることを前提に作ってみました。画像によって適宜変えてね。

Filename: split_image.pl

#!/usr/bin/perl
# Filename: split_image.pl
# 800x600の画像に切り出します
 
use strict;
use warnings;
use Image::Magick;
use File::Basename;
 
our $frame_width  = 800;
our $frame_height = 600;
 
# via http://memo.hirosiki.jp/article/40957443.html
my @files; 
# Extract Windows' wild cards 
while ( my $i = shift @ARGV ) { 
	push( @files, glob( $i ) ); 
} 
 
 
# main 
 
foreach ( @files ){
  my $filename = $_;
  print "$filename\n";
  if ( -e $filename ) {
    cut_img( $filename );
  }
}
exit;
 
 
sub cut_img {
  my $filename = shift;
  our ( $frame_width, $frame_height );
  my $img_orig = Image::Magick->new;
  $img_orig->Read( $filename );
  # via http://www.ss.iij4u.or.jp/~somali/web/im_example/get.html
  my ($width, $height) = $img_orig->Get('width', 'height');
  my $frame = $height / $frame_height;
  
  if ( $frame > 1 ) {
    for ( my $i = 0; $i < $frame; $i++ ) {
      my $img = $img_orig->Clone();
      # via http://www.ss.iij4u.or.jp/~somali/web/im_example/crop.html
      $img->Crop( width  => $frame_width,
                     height => $frame_height,
                     x => 0,
                     y => $frame_height * $i,
            );
      $img->write( make_filename( $filename, $i ) );
      undef $img;
    }
  }
  
  undef $img_orig;
  return;
}
 
 
sub make_filename {
  my $path = shift;
  my $num  = shift;
  my ($filename, $directories, $suffix)
    = fileparse($path, qr/\.[^.]*/ );
  return "$directories${filename}_$num$suffix";
}
 
 
__END__

実行例:

D:\SOLID_SNAKE>split_image.pl snake.png
snake.png
 
D:\SOLID_SNAKE>

Splitimage02
▲タイムパラドックスだ!

最後に

これをするフリーソフトなどいっぱいあるような気がしますが、PerlでImageMagickでいじるともっといろいろ(いろんな意味で)できるのでやってみられるといいかなーと思います。

数年前に自blogでタイトルあたりにSafari用ドロップシャドウ指定をしていたのだけれども普段Windowsなんで全く反映されるの見ること無しに今まで生きてきたのだけれども、このたびOpera9.5にしたらいきなりドロップシャドウがきいて焦った。

これからFirefox3もダウンロードしようかな。

せうぞーさんのエントリにて、
行末の全角スペース(まとめメモ) - 名もないテクノ手 [d.hatena.ne.jp]

*1:リダイレクトを提案して得意になっている人もいるようだけれど、階層構造を示すことの重要性がわかっていないのだと思う。苦笑

とあった件について。

この話しは、おそらくこの前書いた M.C.P.C.: DTP WORLD 2008.7月号:Webとの連携 に関しての感想だと思います。違ったらごめんなさい。

それで、僕のエントリでは、冊子で紹介したWebのコンテンツに直行できるようなリダイレクタを設置したらどうか、と言う提案をしたのですが、それに対するせうぞーさんの意見は、階層構造を示すことの重要性がわかっていないのだと思う。ということになり、目指していることが違うことが明確になりました。

リダイレクタは、現場(実際にInDesignのオペレーションで困っている制作の現場であったり、解決方法を電話口で伝えなければならない印刷会社の顧客対応窓口であったり)にて、この有用な冊子を活用するときに威力を発揮すると思うのですけれども、それよりもサイトの階層構造を認識できないデメリットの方が問題だと考えられているのだと思います。

それを受けて、「冊子からWebコンテンツに誘導することにおいて、階層構造をいかに示すか」ということについて、僕の考えを述べます。


この問題は、ディープリンク禁止の問題に近いものがあります。

ディープリンク禁止論の中でも、「サイト構造を意識せずに途中のコンテンツに入ってこられると、サイト設計の意思とは違う利用をされているので、やめて欲しい」というものがありました。

しかし、今時、検索エンジンから、サイトの奥のコンテンツにいきなりやってくることが多い時代ですから、そもそもディープリンクを禁止するには、Webサイトのシステム自体、ディープリンクを禁止するように作ってしまうことが必要です。そして、それを作るのはちょっと面倒です。

今回のDTP WORLDの冊子では、冊子で示すURLのページ内を探索して、目的のコンテンツに自分の力で行くことにより、サイトの構造を理解させようとしている、そういう風に受け取りましたが、特定のコンテンツを見たい、と言う目的に対して設計者側からついでにサイトの階層構造も勉強しろよ、ていう形になっていて、これはその冊子をみてサイトを利用するときにだけ強いられる学習工程ですから、不親切であると考えます。

そこで、考え方を変えて、コンテンツに直接見に行っても、階層構造を意識できるような作りにしてしまうというのはどうでしょうか。

Alertbox: 直リンクのすすめ(2002年3月3日) [www.usability.gr.jp]

直リンクでユーザビリティは向上する。なぜなら、その方がユーザのニーズを満たす可能性が高いからだ。一般的リンク、例えばその企業のホームページへのリンクは、ユーザを直接個別の記事や製品に誘導する特定的リンクに比べるとあまり有用とはいえない。

ウェブ全体を対象とする検索エンジンがようやく使える状態になってきた今、ユーザはますますこれを利用して、企業のホームページから入っていくのではなく、特定のソリューションにつながる直リンクを探すようになるだろう。

ヤコブ・ニールセン博士の言葉を引くまでもなく、現在検索エンジンやソーシャルブックマーク、他blogによるディープリンクにより、サイト内のコンテンツを単独で直に参照する利用がされている時代ですから、コンテンツ起点でサイト探索を始められる構造にしておくと便利。つまり、コンテンツ内で階層構造を示す仕組みを用意すると、冊子からのコンテンツ誘導のみならず、いろんなシチュエーションに対応できると思います。

コンテンツ内で階層構造を表示する、よくあるやり方として、トピックパス(パンくずリスト)を置いて、サイト構造を「見たい人には見えるようにする」方法があります。他の方法についても、前出 Alertbox: 直リンクのすすめ(2002年3月3日) に書いてあります。

というわけで、今回は、階層構造を示すことの重要性を分かってないと指摘された僕が、階層構造を示すことが重要であると言うのであれば、冊子側の設計で暗示するのではなくて、Webコンテンツ側で示す方法もあるよ、こっちの方が汎用性あるよ。という形で、提案をさせていただきます。

単純に避難訓練の計画とかしててめんどくせーと思っただけなんですけれども、Web系ベンチャー企業にいる人は、自分や、自らの会社のエキセントリックな面ばかりアピールしていて同じ地球人として同じ地表に立っていることが不思議に思わせる効果まで発揮しやがったりしてなんだか戦慄を覚えるので、たまには消火器持ってガソリンが燃えているたらいに向かって粉を噴射している絵とか、オフィスに消防署が入って指導受けて怒られている様などが見られるとある意味親しみが持てるとおもいました。LifeHacksとしてマネするからさ(←やったら負け)。

でもよく考えるとそんなことやるとGIGAZINEとか言われちゃうよね。

QuarkXPress 8のセミナーの報告だそうです。

実験る~む 行ってきた(昨日だけど) [dslabo.blog4.fc2.com]

あとはライセンス形態。
Mac/Windowsがハイブリッドで提供され、かつ、Adobeと同様に2台までインストール可能な点(同時起動は1台までと、そちらの制約も同じですが)。

うわーこれはアドビやらないライセンス形態ですよね。STUDIO 8でWin/Macハイブリッド版だっていうので同時に使わんしMacとWinに入れられるかなーて思ったら、最初に使ったプラットフォームで決定になるっていうので悩んだあげくWindowsに入れたんだけれども、QuarkXPress 8なら悩まなくてもいいってことか。

つーわけで購入の方向に傾きつつあります……

市川せうぞーさんが、Illustrator CS3のPDF出力の入稿を断られたという話。

枯れて候 - 名もないテクノ手 [d.hatena.ne.jp]

過日、印刷会社さまにPDF入稿した時、「InDesign CS2までなんです。CS3は勘弁して欲しい」と言われた。「なんでやねん!」と言いたい気持ちをぐっと押し殺して、わたしも少し大人になった気分だ。

これに対する僕の論の要点は、開発形態がどーたらではなくて、必要な情報が必要な人に行き渡るようになっていないから、せうぞーさんがPDF出力断られるような事態になっているんだ、ていうことです。


Eric S. Raymondのオープンソース三部作のひとつ「伽藍とバザール」に、「はやめのリリース、しょっちゅうリリース」という節がある。

http://cruel.org/freeware/cathedral.html#4

これは(オープンソースでの)プロダクトの品質が高まる過程で、十分な目玉(テスター)によってバグが発見され続けるフェーズを指している。こうしたフェーズを経ることで「バザール方式」は「伽藍方式」よりも品質が高まるという論調だ。

つまり、開発バージョンで徹底的にバグフィックスを行うことで、安定板の品質を担保していると言える。Unixアプリケーションの多くはこうした時間を経て(多くの目玉によって十分に検討されて)、「枯れている」という評価を得ることになる。

現在もこうした方法が取れているのは、やはり「バザール方式」でしかない。「伽藍方式」では、密室裏に(少ない目玉で)開発された「製品」を唯々諾々として「使わせていただく」ほか手だてがないのだ。つまり、現在のAdobe製品をはじめとする商業的プロダクトは「枯れている」状態にはならない。決して。

Illustrator 8を例に出すと、プロプライエタリな製品、かつ寡占状況で標準的な製品として流通量が多かったため、バザール方式で見つけられた不具合を、回避方法という形で蓄積していったわけで、いまのIllustrator8鉄板神話は、形は違えどもバザール方式の成果です。

もっとも、Illustrator 8が、運用で問題を回避できるほどの素直な子だった点はあると思います。Illustrator 9は、同様にみんなでよってたかって使ってみた結果、どうにもならない部分があって、ほとんど使用禁止の評価がされています。

情報は永遠に変わらないURIにとどまっていない。情報の書かれたブログはやがて閉じられ、サイトは移動する。たとえば、QXなんとかの情報が最も蓄積していたのはニフティサーブのフォーラムだったが、既に一意のURIを失っている。わたし個人のサイトでさえ、すでにQXなんとかの情報を排除して久しい。

それは情報の生命力が弱いから。情報は、媒体という宿主を介在して、自己複製・増殖していくものなのであって、本当にみんなに必要な情報なら、宿主をかえてどんどん伝搬していくのだけれども、いまQuarkXPressの情報がロストさつつあるというのは、QuarkXPressの情報の価値(=生命力)がどんどん下がり続け、別の宿主に乗り換えできるほどの生命力がなかったからです。情報伝搬の阻害要因であるNifty-Serveの書き込み引用・転載制限、または市川せうぞー氏のモチベーション低下、というのがなければ、もうちっと生きながらえていた可能性だってあります。

あと人間という宿主の高齢化も指摘しておきます。死んだらロストするという、情報にとってはリスキーな宿主です。しかも、この業界は、情報伝搬のメインが人間という、本当に情報処理に携わる業界のあり方としてこれでいいのか、という状態ですし(再三言っていますが、この業界の人、DTP書籍など買いません)。

QuarkXPress 3.3Jあたりの運用情報は、もはや人間の口述伝承によっているのだと思いますが、Illustrator 8もその要素が多分にあり、運用している人の数が減れば、情報もロストしていく運命にありそうです。

今の時代、情報はインターネットに出しておけば、googleはキャッシュし、Wayback Machine [www.archive.org] がアーカイブするのですから、どんどん出しておくといいです。というわけで、今やっているDTP作業をblogやWebにどんどん出していく行為は、無駄じゃないんだよーてことですね。


Illustrator 13のPDFが受け入れられない件について。これはやっぱり情報流通ちゃんとしていないから。アドビが未だに製品改善をクローズドな何かに頼っている現状(どうやら、ベータテスターであることの表明できないとか?)、実運用においては、問題あったときの情報の蓄積によって運用対処していくしかない、ていうのは受け入れなきゃいけない。しかし、かつてと違い、蓄積するべき情報が、ユーザ側の運用というよりも、機材ベンダ側の問題になってきている。そうなると、必然、守秘義務がからみ、情報の蓄積が局所的になっている。これが現在起こっている状況。

まったく同じ機材を持っていても、ある業者ではちゃんと出力できて、ある一方では、出力できないと言い張る、というのは、同じ機材を使っているのに、同じ情報を共有できていないからですよね。

だから、CS3-PDFが出力できないぷんすか、ていうのは、お気の毒な機材ベンダとおつきあいしているんですね、と評価する、または、出せないと主張する出力屋さんの力量不足・説明力不足と考えるといいと思います。

昨夜地元の飲み屋さんに出かけて仕入れてきた情報によりますと、なんと地元に「すき家」ができるとのこと! すげえ! やっと24時間営業(じゃないかも……)の飲食店が! 今までクルマで13kmほど走らないとすき家なかったから排ガス的にエコ!

気になるのが、もともとセーブオンのコンビニの建物を使うっていうことで駐車場的や店の容量的に間に合うのかな-ていうこと。マクドナルドにおけるミニマック的な位置づけになるのか。

どんどん便利になるなー

クルマのエアコン直りました!

部品注文しようと思ったら、「部品代6万円+入手不可」といわれて、値段を言われた意味が分からなかったんですけれども、今の部品の補修でやってもらってお安く済みました。

でも、「このクルマまだ乗るの?」とも言われました。まあなあ。

DTP WORLD 2008.7月号には、「いまさら聞けない InDesign乗り換え大作戦」という冊子が綴じ込み付録でついてきます。

結構考えられていまして、項目の詳細情報として、InDesignの勉強部屋での、「Study Room の番号」が付いています。

Dtpworld20080701
▲詳細情報に、Study Roomの参照が書いてあります

この番号を頼りに、InDesignの勉強部屋のサイトを探せば、詳しく書かれたページが参照できるという仕組みです。

(逆に言うと、InDesignって、Webつながっていないと使いこなせないソフトっていうことでもあるが。)

そんで、せっかくここまで誌面→Webのアクセスラインを確保しているんだったら、もう一歩工夫できるのではないかと思います。

~~~

それぞれのStudy Room情報に単純化したIDを振ってしまいます。例えば、

「InDesignの勉強部屋 Study Room 1.0 No.19」→「01019」
「InDesignの勉強部屋 Study Room CS2 No.04」→「04004」

など。

次に、そのIDを入力したら、それに対応したStudy Roomが表示されるページを作ります。

Filename: index.cgi

#!/usr/bin/perl
use strict;
use warnings;
use CGI;
my $base_url = 'http://study-room.info/id';
my $q = CGI->new();
if ( my $id = $q->param('id') ) {
  my $url;
  $id =~s/[^\d]//g;
  if ( $id =~m/(\d\d)(\d\d\d)/ ) {
    my $version = $1 + 0;
    my $no      = $2 + 0;
    if ( $version < 5 ) {
      $version = q() if $version == 1;
      $url = "$base_url/study/main$version/study"
              .sprintf('%02d',$no).".html";
    }
    else {
      my $version_cs = 'cs'.($version - 2);
      $url = "$base_url/study/$version_cs/study"
              .sprintf('%02d',$no).".html";
    }
  }
  else {
    $url = './'.$q->url(-relative=>1);
  }
  print $q->redirect($url);
}
else {
  print $q->header(-type => 'text/html', -charset=>'UTF-8' );
  print <<'END_OF_HTML';
<head><title>InDesign StudyRoom Quick Access</title></head>
<body>
<p>InDesign StudyRoom Quick Access</p>
<p>ex. StudyRoom CS3 No.3 => 05003</p>
<form><label for="id">studyroom id:</label> <input name="id" id="id"/></form></body>
END_OF_HTML
}
exit;

とりあえず、http://labo.dtpwiki.jp/studyroom/に置いた。

そうすることによって、StudyRoomの特定の内容を見てもらいたいときには、5桁の番号を伝え、見たい人は、そのページに入力することで目的が達成できます。

ちなみに、mod_rewriteを使うよう

Filename: .htaccess

RewriteEngine on
RewriteRule ^$ /studyroom/index.cgi [L]
RewriteRule ^(\d\d\d\d\d)$ /studyroom/index.cgi?id=$1 [L]

書いたので、URL欄で
http://labo.dtpwiki.jp/studyroom/03015
でも転送されるよ。こういう時のための、独自ドメインですね。例えば、InDesignの勉強部屋の場合、http://study-room.info/j/ に設置することを提案します。なぜ“j”なのかは、JUMPの意味を持たせつつ、電話口で伝えるときに音で伝わりやすいローマ字を選びました。

~~~

というわけで、アイディアの提案でした。

「納豆のねばねばを茶碗に付けずに納豆ご飯を食べることができる」伊奈かっぺい出演の太子食品の納豆のテレビCMを覚えている僕は、メガマックでこぼさずきれいに食べるCMを見てみたいと今朝たまたま市内に行く用事があったので(市内にある)マクドナルドに入ってメガたまごマックをぼとぼと落としながら食しながら思いました。

有害情報規制法案が本日可決したとのことなんですけれども、うちらみたいに、ネットで発注をうけているところがWebにアクセスできん現象をトラブルシューティングするとき、それが有害情報をフィルタリングするソフトであってもなくても、フィルタリングされたことが、ユーザに表示されるようなルールを確約してほしいわけです。

つうのは、以前、有害情報用ではないウェブフィルタリングソフトの窓口に、「御社の製品を使用している場合にユーザのアクセスがフィルタリングされたことをユーザサイドで分かるようになってますか?」ってきいたら、設定によって表示が違うというわけです。

ということは、この製品を使っているユーザがアクセスしている先のWebサイトの側からトラブルシューティングができないわけです。せめて、フィルタリングしているソフト名ぐらい表示してくれる保証があればいいのに。

今度の法案でWebフィルタリングソフトのせいでアクセスできなくなっていることをどのように関知すればいいのかな。

というのを解決するために、エントリタイトルの「Webフィルタリングソフトがフィルタリングした画面をWebフィルタリングソフトベンダは公開してほしい」ということになるわけです。

&dagger;

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

痛いニュース(ノ∀`):町村官房長官 「サバイバルナイフ(ダガーナイフ)の規制強化を検討する」 [blog.livedoor.jp]

日本で一番ダガー使っているのは、書籍をの中でダガー(†)使いまくっている印刷業界だし、Webでダガーを多く使うと言えば特定のWikiの見出し部分だったりするので、僕は印刷業界だしWikiも開設しているということはダガー多用クラスターの両方に属するので、ダガー弾圧でどうなるか不安だ。とりあえず、活字で6cm以上の†使う機会はなさそうなんで何とかなるのかな。

「へっぽこ実験アニメーション エクセル♥サーガDVD への1」にて、主人公のエクセル(♀・かわいい・吉害・CV三石琴乃)が青竜刀を持って暴れる、ていう描写があって、

  • : へっぽこ実験アニメーション エクセル・サーガ への1

    へっぽこ実験アニメーション エクセル・サーガ その1

  • そのDVDのライナーノーツにて、ワタナベシンイチ監督(ナベシン)が、

    ワタナベ「包丁はある事件でマズイってんで鉄砲にしようかって、でも鉄砲も絵的に寂しいよね~て(笑)じゃあ、手に入りにくい刃物で青龍刀だ!って(笑)」

    と書いていて、頭悪いふうの表現をするにもこんなに苦労していることに驚いたとさ。

    ソーシャルブックマークは参加者の性格により雰囲気が左右されると言うことで、エンタメ系をターゲットとしたソーシャルブックマークサービスPingKing [www.pingking.jp] というのがありますが、これのWeb APIが少し前から反応しなくなっています。

    昔作った

    M.C.P.C.: 様々なオンラインブックマークサービスのブックマーク件数を画像ではなくて数値で取得(高機能版)

    でももろ影響出ています。1つのAPIがエラーで止まるとみな止まる仕組みなので。

    しょうがないので、evalでくくって、エラーが発生しても先に進むように改変はしておいたんだけれども、PingKingはほかにもページ内の検索ボックスで検索するとサーバエラーを起こすなどいろいろ調子悪いみたいだし、大丈夫なんだろうかと思いました。

    PSPかってからあんまゲームしていなくて気づかなかったんですけれども、これって、電源On時、電源のスライドスイッチを操作すると、スリープモードになって、もう一回やると、そのままの状態で復帰するのですね。当たり前って言えば当たり前ですけれども、PS3使っていると、ついついセーブしてXMB(クロスメディアバー)に戻ってから電源オフ、と思い込んでいた。

    これやればモンスターハンターポーダブルみたいなゲームも、空いた時間に細々と狩りをできるわけですね。

    そんで、きのう市内のマクドナルドに行ったらリアルでアドホック通信でモンスターハンターポーダブル2ndGやっているお子様が4人いた。おかげで座れんかったぞ。

    朝一発早く起きて、クルマのエアコンのあんばいを見てもらいに、はるばるガレージに行ってきました。

    何とかって言う管がやられていて、メーカーがもうつぶれていて補修部品が入手できるかどうかわからん状態なので、ともかく部品手配してみて、手に入れば交換、手に入らなければ今の部品を補修、という話だった。

    最初の頃はいろいろなものが脱落したこのクルマ、ここ数年大きな故障もなく、おとなしいなと思ったらなんかガタきているんだな。クルマはつぶれそうなメーカーの奴選ぶなってことですね。実家にあったいすゞの117クーペ、補修部品を全国のいすゞからかき集めて直せていたもんなあ。

    実用! Perlでプリンタのメーター確認をする - perl-mongers.org

    ていうエントリを書いたはいいが、

    プリンタメーカーが

    • 裏紙専用増設用紙トレーを安価に設定し販売する
      1. 裏紙使用可能プリンタのアピール
      2. 裏紙使用時のトレイ入れ間違いの防止
      3. プリンタメーカの環境配慮アピールができる
        1. 裏紙専用増設トレーからの仕様枚数をファームウェアで集計
          1. 数え間違え・改竄の防止
          2. 手作業による枚数カウント集計の手間を省く
          3. プリンタメーカの環境配慮アピールができる

      つうことをやればいいのに、と、裏紙集計を手作業でやっていて思いました。


      (2008-06-06 23:05追記)

      このエントリ書くときにトラックバック送ったのだけれども送ったトラックバックがSPAM指定されていてワラタ

      MTのSPAM判定とは相性が悪いんだよな-w

      ゴルゴサーチ デキる男の超A級検索ツール! - 検索ワードはこの男に聞け! [golgo.jword.jp] を使うため、ゴルゴサーチ専用JWordプラグインを入れたIEを起動しているという女の子が居って、その子は普段からOperaばっかり使っている子なんで、それOperaでできるよ、ていうことで、Live Messengerで教えてあげたの巻。べ、別にJWord汚染させたくなかったわけじゃないんだからねっ!

      まず、ゴルゴサーチのページに行って、検索単語の文字ボックスの中ににキャレットを入れてから右クリック。

      Golgosearch01
      ▲「検索の作成」

      次に、検索用のキーを入れます。JWordなので、「j」でも入れて、「OK」を選択。

      Golgosearch02
      ▲gだとgoogleとかぶります

      あとは、アドレスバーで、「j “検索したい単語”」と入れてEnterを押す。

      Golgosearch03
      ▲もうちっとおもしろい単語を選ぼう

      はい、このとおり。

      Golgosearch04
      ▲いちいち検索回数が表示されるあたりがJWordのキモイところ。やめればいいのに

      しかし、この子ゴルゴマニアなんだよな。普段からOpera使いっつーのも変わっているし。

      ……僕おそらく狙撃される。教えなきゃ良かった……

      Adobe Creative Suite 3 Design Premiumを購入したとき、Webもやっている人は大抵、「PhotoshopからImageReady削っておきながら、なんでFireworksつけないんだあほんだら」と憤慨したと思います。そんなぷんぷんしている人間にアドビからのこのこメールがやって来て、「アンケートしてちょ」というもんだから、みんな「Fireworksいれろあんぽんたん」と書いたんだと思います。

      そういうわけで、先日のAcrobat 9発表に合わせて用意されたAdobe Creative Suite 3.3 Design Premiumには、ちゃんとFireworks CS3が添付されているのでした。やったね!

      Adobe - Adobe Creative Suite 3 Production Premium [www.adobe.com]

      これで、Fireworks 8だけVistaマシンにインストールして頻繁に落ちる、ていうことから解放されそうですが、CS3→CS3.3のアップグレード代が21735円ぐらいかかるので、ちょっと考えてしまいますよね……

      InDesign CS3で、新規ドキュメント作ります。

      Inddcs3newdocdialog01
      ▲基本的にペラチラシしかつくらんので横組みデスw

      で、ちょっと気が変わって、キャンセル。

      Inddcs3newdocdialog02
      ▲キャンセルしてみる

      そうすると、ダイアログが一つ戻ります。

      Inddcs3newdocdialog01
      ▲この画面さっきみたあるよ

      ……ん?

      よーく考えたら、キャンセル押したのに、ドキュメント新規作成の動作を終わらせないで、前のダイアログに戻るわけです。

      それなら、表示は「キャンセル」じゃあなくて、「戻る」じゃあねえの?

      あーInDesign 1の時からずうっとだまされてた。子ダイアログでもないモーダルダイアログなのに、キャンセルで一つ前のダイアログに戻るなんてわけわかめ。

      アドビのダイアログ設計は独特だと思っていたけれども、こんなに自然にUI設計ガイドライン違反されると気づかなかったよ。とはいえ、Microsoftが出しているUIガイドラインとかじゃなくて、僕の乏しい人生経験上から導き出されたオレオレガイドラインによります。

      おそらく英語版のInDesignでも「Cancel」なんだろうから、言うても直らんタイプの問題なんだろうなー。そもそも、新規作成のダイアログ自体、複数のInDesignプラグインの集合体らしいので(プラグインを最小にして起動すると、新規作成ダイアログすら出てこなくなります)、それらの関係からすると、「戻る」ではなくて、「キャンセル」なんだろうけれども、プログラマ視点ではなくて、ユーザ視点で設計するのがUIだと思うので、ちょっと工夫のしどころだったのではと思います。

      ECナビが始めた、

      Buzzurl Plus [バザール] / ソーシャルブックマーク [plus.buzzurl.jp]

      で、InDesign関係のソーシャルブックマークができればいいなあと思いました。InDesign関係の人たちは自分のblogで情報公開している人が多いですから、こういういうツールを使うと情報が集約できるよ。逆に言うと現状のばらばら状態で本当に満足しているのかなーとも思うわけです。

      僕もDTP関係のSBM作り中だったんですが(認証関係どう実装しようか、というのと、仕事の方が忙しいので停滞中)、上記SBMがよかったらそっち使った方がいいかなーと考え中。

      perl-mongers.orgというところで、Perlのネタ書きっこしているのを発見して、僕も書いてみようと思って、ログインしてみました。

      ログインには、OpenIDを持っている必要がありますが、僕はlivedoor AuthでOpenIDを有効にしており、このblogに埋め込んでおいたので、しっかりログインできました。

      OpenIDによるログインについては、

      perl-mongers.org に OpenID でサインインしよう! - perl-mongers.orgがわかりやすいです。

      そんで、ログインしてから気づいたのですが、これってログインするとMovable Typeの投稿権限があるユーザアカウントが発行されるっていうことのですね。せっかくなので、なんか投稿しようか、と思って書いたのが

      実用! Perlで法律改正日を調べる - perl-mongers.org

      です。この手のネタだけならたくさんありますけど今後もあげていいのかな。

      # prettyprint対応していただきありがとうございました

      月別 アーカイブ

      ウェブページ

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

      このアーカイブについて

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

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

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

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