趣味のプログラム工房

プログラム

PostScriptからPDFを作成

PostScriptのファイルからPDFファイルを作成するには、、、

まずは、これがないと始まらないghostscript
https://ghostscript.com/download/gsdnld.html

これをダウンロードし、普通にインストール。
デフォルトだと、「C:/Program Files/gs/gs9.21/bin」にプログラムがインストールされるので、ここにパスを通します。
というわけで、環境変数にパスを追加。

これで、準備が整いました。
あとは、C:/Program Files/gs/gs9.21/libにあるバッチからコマンドを実行するだけなのですが、、、
ps2pdf -dNOSAFER f:/test.ps
「-dNOSAFER」のオプションが結構肝のようです。
これがないと、うまく変換がされない。
変換されても、日本語が文字化けするという現象が発生します。
これに結構ハマりました。。。

いろいろなサイトを参考にしていると、「cidfmap」を編集しないと文字化けするとかという情報もありましたが、私は特に何もしなくても大丈夫でした。

とりあえず、ここにあるサンプルは無事変換完了。
あと、下はEUCで保存する必要がります。
最初、適当にメモ帳でそのまま保存したら見事に文字化け(笑)
http://d.hatena.ne.jp/sirocco/20120821/1345554887



2017年04月27日


UPNP(DLNA) メディアコントローラー:MediConWEB

UPNP(DLNA)用メディアコントローラーソフト「MediConWEB」を公開しました。

WEBインタフェースのメディアコントローラーです。
世になかったので自分用に作成したものです。


ソフトに添付のreadmeからの抜粋ですが、
DLNA(UPNP)のメディアコントローラーWEBアプリです。
Perl、WEB上で動作します。
当然、実行にはWEBサーバ、および、Perlの実行環境が必要です。
また、Perlのモジュール「Net::UPnP::ControlPoint」が必要です。
CPANを使い、「install Net::UPnP::ControlPoint」などでインストールをしてください。

本WEBアプリは、同一ネットワーク上にある、UPNP機器を検出し、
その中から、メディアサーバとメディアレンダラーを選択して、
メディアサーバのファイルをメディアレンダラーで再生させることができます。

メディアサーバ、レンダラーのレスポンスの調整は
「conf.cgi」で適当に行ってください。単位は秒です。
サーバ・レンダラーの反応が早いならば短くしたほうが快適です。
逆に、反応が返ってこない。デバイスが検出されない等の場合、値を大きくしてください。

動作確認:
メディアサーバ:MiniDLNA
メディアレンダラー:Sony BRAVIA KDL-40EX700/B

気が向いたら使ってください。
ダウンロードはこちらから。
UPNP(DLNA) メディアコントローラー:MediConWEB


スクリーンショット


何かあったらこちらへ
◆掲示板



BUFFALO リンクステーション ネットワーク対応HDD 2TB LS410D0201
もちろんDLNA メディアサーバ機能搭載です。(最近のネットワークディスクは大体対応していますよね。)

2015年04月26日


UPnP ControlPoint(コントロールポイント) WEBインターフェース

LinuxマシンにてPT2で録画サーバ、MiniDLNAにてメディアサーバを立てたのですが、これを簡単にTVに出力する方法はないかということで、
WEBインタフェース作ってみました。
(というか、意外とこういうソフトってないんですね。。。)

Perlで「Net::UPnP」というライブラリが見つかったので、それを使って作成しました。
本当はPHPのほうがよかったのですが、使えるライブラリがなかったので断念。
gupnpというのが見つかりはしたのですが、インストールができなかった。


PerlのNet::UPnPを使えばそれなりに苦労せず目的は達成できましたが、
もうちょっと使いやすくなるとうれしい。
毎回毎回、「Net::UPnP::ControlPoint」の「search」でUPnPデバイスを取得しないといけないのは正直パフォーマンスが悪いです。
ページ遷移が発生するたびにこれでは、時間がかかりちょっとイラッとする。
ネットで検索した例だと↓のようなものばかりですが、

$upnp->search(st => 'upnp:rootdevice', mx => 3);

そのほか、オプションとして、hostでIPアドレスやIP:ポートが指定できるようです。
参考:http://nazuna.sakura.ne.jp/software/upnp/get_device.html


ちなみに、UPnPのサービス名やパラメータを調べるのに、
Linuxに入っていた「GUPnPユニバーサルコントロールポイント」が大変便利でした。


2015年02月24日


cfspreadsheet の挙動がおかしい Sheet指定無効?

Coldfusion(ver9)でcfspreadsheetタグを利用してExcelファイルの編集をと考えているのですが、マニュアル通りの挙動にならない。

複数のシートのあるブック(ファイル)で、複数シートの編集をしたいのですが、マニュアルによると

◾複数のシートを持つ Excel ファイルを読み取るには、read オプションで複数の cfspreadsheet タグを使用し、シートごとに異なる name および sheet または sheetname 属性を指定します。
◾単一ファイルに複数のシートを書き込むには、write アクションを使用してファイルを作成し、最初のシートを保存します。update アクションを使用して、各追加シートを追加します。

http://help.adobe.com/ja_JP/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec17cba-7f87.html


とあるのですが、cfspreadsheetのreadオプションではシートごとに読み込むことはできず、すべてのシートが読み込まれます。
また、writeオプションでも、シート指定しての書き込みができないため、「最初のシートを保存」ということもできません。
そのため、updateオプションを使用したとき、シートが既に存在しているとエラーとなってしまいます。(updateは更新というより、シートの追加)

いろいろと検証した限りでは、cfspreadsheetのsheetオプション、sheetnameオプションは、アクティブシートを指定するだけの代物のようです。


というわけで、実際に複数シートを扱う際には、
cfspreadsheetで全シートを読込、
cfscriptのSpreadsheetSetActiveSheet関数で、シートを切り替えながら編集するのが正解みたい。
で、書き出す時も、cfspreadsheetのwriteオプションで一度に書き込み。

まあ、全部cfscriptのSpreadsheetRead関数とかで操作でいいんですが。

なんか釈然としないが、とりあえず解決!

2013年05月26日


Coldfusion9.0.2 うぜー!!

Coldfusion9.0.2ですが、9.0.0から変わりすぎじゃないですか??

マイナーバージョンアップとは思えないほどの互換性orz

勘弁してくれ。。。。


まず、一番の致命的なのは、9.0.0で使えていた
COMオブジェクト(cfobjectのtype=com)が使用できない。

続いて、「HTTPレスポンスヘッダに改行コードが含まれている」と自動的に削除される。。。ohhh

これにより、クッキーに改行コード付きの値を格納できなくて困りました。


改行コードについては、仕様だし、セキュリティ上必要だから許せるが、comについては完全なバグだろ?

2013年04月28日


SJISからEBCDICへコード変換

SJISからEBCDICへ変換する必要があったのですが、これがなかなか難しいようです。
特に、マルチバイトコード(全角文字)を含む場合。

Linuxの場合、ddコマンドやiconvコマンドで変換可能。
ddコマンドの場合は、シフト文字(シフトイン、シフトアウト)が付かない、
で、iconvの場合は付きます。
一般的には、シフト文字がつく、iconvが利用されるっぽい。

ただし、これをwindowsでやると難しい。
というか、windowsにはコード変換してくれる無料のツールが見当たらない。

なんでだろう、、、

2013年02月08日


Webベース mpd client NeoMPC

以前紹介した、NeoMPCというWEBのMPDクライアントについてです。


NeoMPCの前の記事

NeoMPCは非常に使いやすいクライアントソフトだと思います。
バグさえなければ、、、

これは使い物にならなくなった、iphone用クライアントの「MPod」に代わり、iphoneから利用しているWEBベースのMPDクライアントですが、実はバグがあります。

というわけで、その修正方法を紹介します。

バグ
1、Browseのメニューで曲の一覧を表示時、一画面に一覧が全部入らない時に、曲を追加する操作を行うと、その後の画面で下へスクロールできなくなる。
(リストの下にあるはずの曲が操作できない)

これの修正方法は簡単で、
./templates/default/style.css
①24行目あたりにある、「#menu」のpositionの設定をコメントアウト。
②12行目のbodyのmarginをすべてゼロにする。
以上です。


2、Playlistが空の時、Browseのメニューでファイル名が表示されない。
ファイル名は表示されないが、タグが設定されていればタグの内容は表示される。(タイトルなど)
通常は、タグが設定されていればタグが、タグが設定されていなければファイル名が一覧として表示されるが、Playlistが空のときはファイル名が表示されれなくなる。

修正方法は、
./lib/page.php
①246行目のforeachの行をコメントアウト。
②その閉じるカッコの、254行目のカッコをコメントアウト。
これでOK。

うーん、このループ文は何をしてるんだろう。。。


あと、個人的に修正した点は、
Browseでの曲の追加リンク「+」。
これを押したときに、一番上まで自動スクロールして戻ってしまうのを、ボタンを押した曲の位置でとどまるように修正。
曲を何度も追加するときに、いちいちスクロールしなおすのに便利です。

改修対象のファイルは
./template/browselist_item.html
①27行目のaタグに「name="{:$browselist_item.file|escape:'url':}"」といったラベルを設定。
②上記アンカータグのリンク先のURLとして、リンク先URL末尾に「#{:$browselist_item.file|escape:'url':}」を追加。
意味は分かりますよね??


NeoMPCお勧めですよ!

2013年01月18日


IIS7.5でPerlを実行【Windows2008R2】

大人の事情で、IIS+Perlの環境でプログラムを動かすことになりました。
そのための検証を行ったのですが、意外にメンドクサイ。


IISのインストールは、ISAPI拡張だけあればよさそう。
CGIはおそらく不要です。(必要ならインストールして)


続いて、ActivePerlのインストールですが、64bitOSであっても32bit版のほうがよさそうです。


インストールが完了したら、あとはIISPerlのマッピング。

『ハンドラーマッピング』の設定から、スクリプトマップの追加を行います。
そこで拡張子「*.cgi」にたいし、「perlis.dll」(デフォルトのままだと、C:\perl\binの下にある)を指定します。
ここで、perl.exeは指定しないこと!

マッピングが追加できたら、念のため、「機能のアクセス許可の編集」を選び、実行にチャックが入っていることを確認。


これで、Perlが使えるようなっているはずです。

ただし、注意点として、どうもIISが出力するヘッダがおかしいらしく、perlスクリプトに手を入れる必要があります。

具体的にはヘッダの出力前に、下記の文字列を返す必要があります。何故か。
print "HTTP/1.1 200 OK\n";


この修正が面倒な場合、マッピングとして「perl.exe」を使う方法もありますが、こちらの場合、スクリプト内で呼んでいるライブラリやデータファイルなどのパスを絶対パスで書く必要あります。
おそらく、ヘッダ出力の書き換えより影響範囲が広いと思われるため、私としては、perlis.dllを使うのがお勧め。

あと、perlEx30.dllを使う方法もありますが、こちらも、パスがうまく通らないっぽいです。

2012年09月14日


USB赤外線リモコンキット!!

パソコンからUSBで接続して使える、USB赤外線リモコンキット(組立済)を購入しました。

この商品は、普通のリモコンを使って、パソコンを操作するという機能と(赤外線の受信)、パソコンをリモコンとして他の機器を操作する機能(赤外線の送信)があります。


これが本体。


市販のケースに入れた状態(笑)



この商品を実際に使ってみました。
すぐ近くにあった製品。
日立製 扇風機
ソニー製 液晶テレビ
富士通ゼネラル製 エアコン
中華アンプのリモコン

に試しましたが、ソニー製テレビとエアコン、アンプは操作できませんでした。
そもそも、エアコンは送信データが多すぎて、この赤外線リモコンではぜんぜん情報量が足りないらしいです。(この製品は6バイトまで)
結局操作できたのは扇風機のみ。


あと、結構出力が弱い。のか、指向性が強く、しっかり向けないと反応してくれません。


それにしても、ソニー製品については何とかならないのかといろいろ調べてみたら、、、ファームウェアの改造で何とかなるらしいじゃないですか!

というわけで早速チャレンジ。
初のマイコンプログラミングです(笑)。



まず、用意するのは専用のコンパイラ。
この製品のICは「PIC18F14K50」ということで、
使用したコンパイラは、mplabc18のバージョン3.42


元となるファームウェアのソースは
http://a-desk.jp/modules/forum_hobby/index.php?cat_id=8
ここからダウンロード。

次に、ソースの改造はこちら。
http://a-desk.jp/modules/forum_hobby/index.php?post_id=95

途中で切れちゃっていますが、前半部分さえわかれば十分で、後半は元のままでOKでした。
さっそく、落としてきたソースと、コンパイラを使ってリビルド。

が、ちっともうまくいかない。

で、どうやら「Standard-Eval」版でないと、リンクで失敗するようです。
Lite版だと、コンパイル後のバイナリが大きくなるため、リンクでチップの容量に収めることが出来ず容量オーバーとなっているようです。
私はこれに気がつくまで、Lite版で試行錯誤してて、4,5時間を無駄にしました。orz

ちなみに、
cannot specify #pragma config directive when compiling for generic device.
Error - section '.udata_usb_device.o' can not fit the section. Section
などと、エラーが出ていましたが、Standard版に変えるとなくなりました。。。
なんだそら。


というわけで、ビルドも出来るようになり、無事バイナリファイルの作成に成功。

あとは、HIDBootLoader.exeでチップに書き込むだけ。

無事、ソニー製テレビの操作が可能になりました!!
(あと、ついでに中華アンプも操作可能になりました。)



で、使い道は?と聞かれると微妙なんですが、、、
エアコンが操作できれば、また選択肢は増えるのですが、テレビと扇風機だけだと、、、


まあ、ちょっとした玩具ということで。
2000円だし。

2012年07月23日


Fedora17でMediatomb! コンパイル&インストール

公開されているパッケージを使ってもよかったのですが、リポジトリにあるパッケージをつかってだと、どうもトランスコード(Transcode)が効かない。


というわけで、ソースを落としてきて自力でコンパイルすることに。
必要なライブラリはいろいろサイトを見たり、configureの結果を見てインストール。

で、いざコンパイルとなると必ずこける。

from ../src/zmmf/zmmf.h:35,
from ../src/autoscan.h:36,
from ../src/autoscan.cc:36:
../src/zmm/object.h:51:32: error: declaration of 'operator new' as non-function
../src/zmm/object.h:51:27: error: expected ';' at end of member declaration
../src/zmm/object.h:51:39: error: expected ')' before 'size'
make[2]: *** [libmediatomb_a-autoscan.o] Error 1

../src/scripting/script.h:69:5: error: ‘JSScript’ does not name a type
../src/scripting/script.h:70:5: error: ‘JSScript’ does not name a type
../src/scripting/script.h:118:5: error: ‘JSScript’ does not name a type
../src/scripting/script.h:119:19: error: ‘JSScript’ has not been declared
make[3]: *** [libmediatomb_a-autoscan.o] Error 1

とか。。。

どうも、コードのバグっぽく、有志によるパッチが出ています。
mediatomb-0.12.1.tonewjs.patch
mediatomb-0.12.1-gcc46.patch
mediatomb-0.12.1.jsparse.patch
libav_0.7_support.patch

とりあえず、自分が当てたのは上4本。
機能の有効の有無によっては、必要のないものもあります。
(configureのオプションしだい)

自分はパッチを探すまでにだいぶ時間がかかってしまいました。
てか、mediatombだれかバージョン上げた品質の高いのを公開してくれ!


ちなみに、一般常識かもしれませんが、
make install はrootで行わないとエラーになります。


だが、結局最後までlibdvdnavを有効に出来なかった、、、
コンパイルが通りません。orz


2012年07月14日