風柳メモ

ソフトウェア・プログラミング関連の覚書が中心

IRC用ダイスボット「ボーンズ&カーズ」(BCDice)のtestをLinux(CentOS 6.5)上で動作させるための覚書

先日、IRC用ダイスボット「ボーンズ&カーズ」のコマンドが使用できるTwitter用botを作成した。

IRC用ダイスボット「ボーンズ&カーズ」のTwitter版を試作: 風柳亭

これは、Diceだよ!TwitterのStreaming APIを試用するための習作bot)を流用して作ったこともあり、基本Pythonで動作している。
ダイスロールは、Pythonの子プロセスとしてRubyスクリプト(cgiDiceBot.rb)を呼び出し、返ってきた結果(標準出力)を加工してツイートしているため、実はBCDiceのソースコードには全く触っていなかった。


ただ、しばらく運用しているうちに、いくつか問題が判明したため、最小限のパッチを当てる必要が出てきた。

問題点

No. 問題点 原因 対策
1 cgiDiceBot.rb実行時、 extratablesが反映されない src下にextratablesが必要*1 src下にextratablesへのシンボリックリンク作成
2 diceBot下に非公式ボットを置いた際、cgiDiceBot.rb実行時、 DiceBotLoader#loadUnknownGameで読み込まれない src下にsrc_bcdice/diceBotが必要*2 src下にsrc_bcdiceディレクトリ作成&src_bcdice下にdiceBotへのシンボリックリンク作成
3 src/test.rbでエラー発生 ruby.exeをコールしている /usr/bin/rubyへのシンボリックリンク(/usr/bin/ruby.exe)作成
4 src/test/test.rbでテストが一つも実行されない testData.txtをパースする際、\rが残ってしまっている(\r\nではなく\nで分割しているため) testData.txt読み込み時、\r\nを\nに置換
5 src/test/test.rbで標準のテストが一部失敗する test.rbが../../src_diceを基準にしている*3 ../../に、srcへのシンボリックリンク(src_bcdice)作成
6 src/test/test.rbのエラー出力が文字化けする 結果がShift-JISで出力されている UTF-8出力に変更(Windows環境下とで場合わけ)


なお、これらの問題点は、

ということが発生要因ではないかと思われる。

パッチ

BCDiceを展開したディレクトリ(BCDice-master等、srcの一つ上)に以下の patch.sh 及び test.diff を置き、patch.sh を実行。
BCDice Ver2.02.15 2014/04/29 で動作確認。

patch.sh
#! /bin/bash
CURDIR=`pwd`
if [ ! -e /usr/bin/ruby.exe ] && [ -e /usr/bin/ruby ]; then
  sudo ln -sf /usr/bin/ruby /usr/bin/ruby.exe
fi
if [ -d ./src ]; then
  if [ ! -e ./src_bcdice ]; then
    ln -sf ./src/ ./src_bcdice
  fi
  cd ./src
  if [ ! -e ./extratables ]; then
    ln -sf ../extratables/ ./extratables
  fi
  mkdir -p ./src_bcdice
  if [ -d ./src_bcdice ]; then
    cd ./src_bcdice
    if [ ! -e ./diceBot ]; then
      ln -sf ../diceBot/ ./diceBot
    fi
  fi
fi
cd $CURDIR
patch -uN ./src/test/test.rb < ./test.diff
test.diff
--- ./src/test/orig/test.rb     2014-05-28 12:56:16.929296739 +0900
+++ ./src/test/test.rb  2014-05-29 00:46:58.740404535 +0900
@@ -20,7 +20,7 @@

     resultFile = './testData.txt'

-    buffer = File.readlines(resultFile).join.toutf8
+    buffer = File.read(resultFile).toutf8.gsub(/[\r\n]+/, "\n")
     testDataList = getTestDataList(buffer)

 #    @testResultFile = open('testResult.txt', 'w+')
@@ -123,7 +123,7 @@
       log << "index:#{@testIndex}\ninput:#{@input}\nresult:#{result}\ngood  :#{@good}\nrandsText:#{@randsText}\n"
     end

-    return log.tosjis
+    return RUBY_PLATFORM.downcase =~ /mswin(?!ce)|mingw|cygwin|bccwin/ ? log.tosjis : log
   end

   def getTestDataList(buffer)

追記1:公式リポジトリへの反映方法考察

上記のパッチは(自分がRubyを知らないこともあって)『極力元のソースコードは変更しない』方向で実施したため、公式リポジトリへの反映を考慮した場合、このままだとシンボリックリンクの扱い等が問題になってくると思われる。


以下、

  • Windows と Linux 双方の対応。
  • リポジトリのディレクトリ構成は保ったまま、どどんとふBCDiceのいずれであってもtest.rbが走るようにする。

としたい場合の修正方法を検討する。

Windowsとの差分対応その1(問題点No.3)

いくつかのソースコード(test*.rb)中で、

command = "ruby.exe -Ku testPointer.rb #{ARGV.join(' ')}"

という箇所が出てくるが、'ruby.exe' だと Linux では実行時にエラーとなるため、'ruby' に置換する。

Windowsとの差分対応その2(問題点No.4, 6)

改行コード及び文字コードの問題なので、上記test.diffの内容を ./(src|src_bcdice)/test/test.rb に反映する。

パスの問題(問題点No.1, 2, 5)

どどんとふとBCDiceとで、ソースコードは共通であってもディレクトリ構成が異なっているために発生すると思われる問題。
なお、これらはWindows上でBCDice/src以下からtest.rbやcgiDiceBot.rbを動作させる場合にも発生するはず。
BCDiceの方でシンボリックリンクを作成することで対処可能ではあるが、Windowsとの共通化を考えた場合にはあまりうまくない。
一応、Windows上でも mklink コマンドでシンボリックリンクの作成は可能ではあるが。
いくつかのソース(TableFileData.rb、diceBot/DiceBotLoader.rb、test/test.rb)でextratablesやsrc_bcdiceディレクトリを参照している個所で、ディレクトリの存在をチェックし、存在しない場合にはパスを変更するような処理を入れるのが妥当か。

ソース名 デフォルトPATH 変更PATH
TableFileData.rb './extratables' '../extratables'
diceBot/DiceBotLoader.rb './src_bcdice' '../src'
test/test.rb '../../src_bcdice' '../../src'

*1: TableFileData.rb:40: @dir = './extratables'

*2: diceBot/DiceBotLoader.rb:4: @@bcDicePath = './src_bcdice'

*3: test/test.rb:19: DiceBotLoader.setBcDicePath( '../../src_bcdice' )

乙佳佐明(☆よしみる)著「ココロノミカタ」単行本がJコミより届く。

いえ、届いたのは先週なんですけれどね(苦笑)。先ほどやっと中身を確認できたので。
ちなみに、クロネコメール便で届きました。

発注日 2014/05/17(土)
発送日 2014/05/22(木)
投函日 2014/05/26(月)


作品紹介・感想など

メガネと左目の下のホクロが可愛い*1“旅の花屋”『ココロさん』と、相棒であるお猿の『ミカタさん』の旅情物語。
基本は一話完結形式の全11話+番外編1話。
「旅」は“場所”だけではなく、明治〜平成という“時代”も渡ります。


不思議なことに、時代を経ても変わらないように見える、ココロさんとミカタさん。
ですが、それ以外には特に(魔法を使ったりといった直接的な)不思議の描写があるわけではなく、旅先で出会った人々との交流が主体です。でもその交流を通して、人々が幸せになっていく、その様子を見たココロさんも幸せになる、という軌跡と奇跡の物語。
私的には、一見、ココロさんとツーカーに見えて、実は全然違うこと(主に食欲方面)を考えているミカタさんがツボ。



既にPDF版を読んではいましたが、改めて紙の単行本で読み返しました。
うん、やっぱり(少なくとも今の段階では)漫画は紙で読むのがいいですね。
ということは、まだ当分は蔵書が増え続けるわけかぁ。そろそろ、万のオーダーに届きそうなんだけれども。

単行本の出来はどんな感じかというと…

今回注文したのは、『表紙マット加工+無線綴じ』でした。

大きさは、ほぼB6サイズ(実測:128mm x 181mm、厚さ11mm)。背表紙にタイトルと著者名が印刷されています。
もちろん、PDF版と比べると画質もかなりよくなっています。

PDF版(200%表示) 単行本(300dpiでスキャン&166%拡大)



裏表紙には、著者のサイン(印刷)付。


他に印象的だったのは「(モノクロページの)紙質がいい!黒が綺麗!」ということ。
βの頃から変わっていないとすると、印刷業者は製本直送.comだと思われるの*2料金シミュレータのページから推測するに、本文用紙は「ホワイトしらおい」(104.7グラム/平方メートル)あたりなのでしょうか。
画質もよいので、ミカタさんの台詞のような小さな手書き文字でもくっきりときれいに読めます。
カラーページがモノクロになってしまうのは残念ではありますが、まぁこれは仕方ないです(モノクロ化されたカラーページでもそれなりに綺麗ではあります)。



Amazonでも販売開始されていますね。
ココロノミカタ

ココロノミカタ

*1:なぜ衣装や他の特徴に触れない…?>自分

*2:確認したらトップページの『ご利用事例』のところにJコミが紹介されていました

「Jコミで印刷できるってよHD」で貰えるPDF版の画質に関するJコミさんとのやり取りについて

「Jコミで印刷できるってよHD」で貰えるPDF版の画質が悪くてちょっと残念… - 風柳メモ

を書いた後、赤松氏はじめJコミの方とやり取りした内容のうち、公開できる部分に関して記述します。

要点は、

  • 現状配布しているPDFは交換すべき瑕疵ありとは判断しない(作品閲覧の目的には十分な品質である)。
  • ユーザからの要望を含む、各種要件を総合的に判断した上で、バランスの良い技法・配布方法を検討している。
  • 今後も改修・検討は引き続いて行われる。

ということになると思います。

Twitterでのやり取り


からの一連のやり取りを参照。

メールでのやり取り

記事およびTwitterでのやり取りを示したうえで、当方の希望として

  • 「Jコミで印刷できるってよHD」を発注時に頂けるPDFの画質は、せめてカヲルやJComi Viewer+における高解像度版(JPEG・827×1170)相当の画質であって欲しい。
    ※欲を言えば、印刷用に使用されるデータ(300dpi)であれば大変うれしいのですが。
  • 以前購入させて頂いた「Jコミ | JコミFANディング - 八神健PDFセット」内のPDFも調べてみると(Web/JComi Vieer+の同名作品と比較して)画質が劣化しているようですのでこれも改善の上、再度ダウンロードさせて欲しい。

ということを申し上げたことに対してのご回答です。
引用許可を得た部分のみ。

法務担当者様の見解(主に「画質の良いものを再ダウンロードさせてほしい」という要望に対して)

  「Jコミで印刷できるってよHD」サービスのご購入時には、「Jコミで印刷できるってよHD利用規約」に
ご同意をいただいておりますが、同規約第11条におきまして返品・交換に関します規定がございます。

〜〜〜〜〜〜
第十一条 返品及び交換
  1 購入者は、本サービスにおいて提供された書籍及びPDFファイル等を、返品することはできません。
  4 PDFファイル等につき、当社が交換すべき瑕疵があると判断した場合には、購入者は当社に交換を請求することができます。
〜〜〜〜〜〜
弊社が11条4項にある「瑕疵」ありと判断する場合とは、作品閲覧という目的に通常必要となる程度の品質を
備えていない場合を想定しておりま す。
具体的には、ページ抜けや著しく劣化した画像などがこれに当たります。
この度の作品データにつきましては、弊社としましては11条4項に当たる瑕疵はないと判断しておりまして、
申し訳ございませんが契約上の理由での交換をお受けすることはできません。

PDF配布に関する業務のご担当者様からの見解(画像の劣化に関する件)

・ユーザーからの要望は多種多様であり、出来うる限り要望に沿う方法を検討していること。
・精度、ファイルサイズなど総合的な判断から最もバランスの良い技法、配布方法を検討していること。
・今後も改修・検討は引き続いて行っていくこと。

「Jコミで印刷できるってよHD」で貰えるPDF版の画質が悪くてちょっと残念…

「Jコミで印刷できるってよHD」が正式にスタートしたということで、どんな感じかな?と思って注文してみました。


今回注文したのは、☆よしみる(乙佳佐明)氏の

ココロノミカタ [ 198 頁 ]
表紙マット加工+無線綴じ (1320円)

マンガ図書館Z

です。送料が237円かかるので、合計1,557円(税込み)。
「ココロノミカタ」はJコミで無料公開されており、ブラウザを使ってオンラインでも読むことが出来ます。


一番期待していたのは、一緒にもらえるPDF版。

(3)「DRMフリーのPDF版(電子書籍)」も同時に貰える。
購入者のメールアドレスなどの電子透かしが刻印された「DRMフリーのPDF版」を、購入手続後30分以内に発行します。
紙の本が届くまで、電子版で楽しんでもらおうというわけ。実は、これだけでも欲しい人が多いんじゃないかな(笑)。DRMフリーなので、どんな端末にでもコピーして読むことができます。

★ 「Jコミで印刷できるってよHD」が正式スタート! - (株)Jコミックテラスの中の人

まさに、「これだけでも欲しい」と思ったので期待していた…のですけれども。


「30分以内」というのには偽りなく、注文完了メールから、PDFダウンロードのお知らせまでは、11分強でした(メール送信時間で確認)。
それで、いそいそとダウンロードして、読んでみたところ…ん?何か、妙に絵にノイズがのっていない?気のせいかな?


…と思って、ブラウザで表示した画像と比べてみたのがこちら。

Acrobat Reader 11.0.17 (200%) Firefox 29.0.1 (300%)

明らかに、PDF版(左)の方が画質が悪いのですけれども…。
最初、右側にはGoogle Chrome 34.0.1847.131 mによる画像を貼り付けていましたが、アンチエイリアスがかかっており比較しづらかったため、Firefox 29.0.1にてアンチエイリアスを無効化した上でキャプチャしなおしました。


ちなみにファイルサイズは、

今回配布されたPDF JComi Viewer+(Android)の高解像度版
31.75MB 37.57MB

となっております。
おそらくどちらもJPEG圧縮で、JComi Viewer+の方はサムネイル+α等の分があることを考えると、サイズからして元画像は同じものを使っているんじゃないかな?と。
それでこれだけ画質が違っているということは…?「電子透かし」を埋め込み→保存時に劣化したのかな、などと推測しています。


せめて、ブラウザ版/JComi Viewer+の高解像度版と同程度の画質は維持して欲しかったです…なんとか改善されることを願います。


追記

調査していただけるようです→【追記】顛末はこちら



追記2

試みに、ブラウザ版の表紙画像を、CentOS 6.5 上で ImageMagick 6.5.4-7 2014-02-10 Q16 の convert を使って、75%(-quality 75)のJPEGに変換すると、

Acrobat Reader 11.0.17 (200%) quality75%に変換後ペイントで表示(300%)

こんな感じで、ブロックノイズの出方が非常によく似た結果になりました。
元ファイル:235,768 バイト→変換後:198,229 バイトで、約84.0%。一方、JComiViewer+高解像度版:37.57MB→配布PDF:31.75MBは、約84.5%。
「quality 75%で再保存している」という仮説は、それなりに説得力があったり…?

追記3(余談)

★ 「正式版:Jコミで印刷できるってよ」のHD仕様を公開! - (株)Jコミックテラスの中の人によると、

WEB公開用保管データ 144dpi
Jコミで印刷できるってよHD印刷用データ 300dpi

ということなんですが、自分はてっきり印刷版購入時に貰えるPDFはこの印刷用データの方なのかな?と密かに楽しみにしていたのですよね。
今からでも遅くないので、そうしてくれないでしょうか(笑)。


ちなみに、WEB公開用保管データ(高解像度)の典型的なサイズは、827ピクセル×1170ピクセル。
これが 144dpi 相当だとすると、元サイズは 5.743inch×8.125inch→145.9mm×206.4mm。おおよそA5(148mm×210mm)ですね。これが基準なのでしょうか。
その割に、PDFのプロパティでは、ページサイズ 291.7 x 412.7 mmだったりしますが…。

追記4

「あれ?まさか…」と思って、以前JコミFANディングにて購入した八神健PDFセットも確認してみましたが…やはり、Jコミに掲載されているもの(ブラウザ版・高解像度)と比較すると、画像は劣化してしまっているようです(哀)。
今まで苦情はなかったのかな…?
これもできれば改善の上、再ダウンロードさせていただけないかなーと思ったりもします。

【KomeponHS】はてなスターをKomepon!につけるユーザースクリプトを試作

@さん作のKomepon! - はてブやTwitterのコメントをワンクリックでチェック!で表示したページに、はてなスターを付けるユーザースクリプト(Greasemonkey/Google Chromeの拡張機能等兼用)を作ってみた。
[続きを見る]を自動的にクリックする機能付き。

インストール

Firefox + Greasemonkey
  1. 上記のダウンロードリンクをクリックし、指示に従ってインストール。
Google Chrome
  1. 上記のリンクを右クリック→「名前を付けてリンク先を保存(K)...」にて、いったんローカルにスクリプトファイルをダウンロード。
  2. 右上のメニューアイコン(Google Chromeの設定)をクリックして、「ツール(L)」→「拡張機能(E)」を開く。
  3. 1. でダウンロードしたスクリプトファイルを、2. の「拡張機能」画面にドラッグ&ドロップし、"新しい拡張機能の確認"ダイアログで[追加]を選択。