趣味のプログラム工房

プログラム

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日


前へ