M.C.P.C.

―むり・くり―プラスコミュニケーション


« 2008年5月 | トップページ | 2008年7月 »

2008.06.30

はてなダイアリーのRSS 1.0とRSS 2.0ってこんなに違うんでしたっけ?

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/

[RSS] | 固定リンク | コメント (0) | トラックバック (0) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

2008.06.29

嗚呼!印刷工! 雑記のRSS生成を直した。

以前、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;
}

[RSS] | 固定リンク | コメント (0) | トラックバック (0) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

2008.06.28

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

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付きまくりのバージョンリリースしちゃうと凹みますね。

[Perl] | 固定リンク | コメント (0) | トラックバック (0) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

2008.06.27

InDesign組版で積極的にインラインオブジェクトを使う

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

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

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

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

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

ね、簡単でしょ?

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

[InDesign] | 固定リンク | コメント (0) | トラックバック (0) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

2008.06.26

アンケート:Windows XP(Vista除く)のDTPで、ユーザアカウントの所属グループ権限は?

気になったので、@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グループ権限で作業している人が過半数。

にて掲載しました。

[DTP] | 固定リンク | コメント (0) | トラックバック (0) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

2008.06.25

これdo台でVistaマシンのHDDをクローンしたらカスペルスキーのアクティベーションではまった

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

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

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

[パソコン・インターネット] | 固定リンク | コメント (0) | トラックバック (0) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

2008.06.24

HTMLのリスト要素を理解してプレーンテキストへ変換

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
$

とても便利。

[Perl] | 固定リンク | コメント (0) | トラックバック (0) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

2008.06.23

MIME::Lite用の時刻文字列生成

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使った方が楽なんじゃないかという気にもなってきました。

[Perl] | 固定リンク | コメント (0) | トラックバック (0) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

2008.06.22

Photoshop CS3+Mac OS X 10.5.3のデータロストの件でのAdobeのいいわけがひどい

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使いの方いらっしゃいませんか!

[DTP] | 固定リンク | コメント (2) | トラックバック (2) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

2008.06.21

画像を決まった数に分割するPerlワンライナー(Image::Magick::Tiler使用)

昨日の記事を書いた後、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>

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

[Perl] | 固定リンク | コメント (0) | トラックバック (0) | このエントリーをはてなブックマークへ追加 livedoor Clipでこのサイトを登録している人数livedoor Clipでこの記事をクリップ!

< 最後 « これより前10ä»¶ | 全件